- 浏览: 144799 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
august_000:
很有道理,我已经亲自测试过了:
public class ...
单例模式之线程安全解析 -
Chris_bing:
一个单例有这么多名堂,最后那个内部类的解决方案很有创意啊,受教 ...
单例模式之线程安全解析
==========================它们的区别===========================
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象,才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
总结:
HashSet无序
TreeSet有序
二者里边不能有重复的对象
=====================================他们的用法======================
1、在HashSet中如何确定对象的唯一呢,在进行集合的操作时,用equal方法来判断对象是否唯一。这里要强调的是,在java里千万要警惕 == 操作符,==是判断两个对象的物理地址的,没有任何业务意义。
源代码如下:
----------------------------------------------------------------------------
2、TreeSet的用法
参考链接:
http://blog.csdn.net/woisnong/article/details/7433453
http://mahilion.blog.163.com/blog/static/1830872952011429112232362/
http://hi.baidu.com/alexandrae2008/item/d770bc871caf285e26ebd9ca
http://www.cnblogs.com/jcli/archive/2011/08/09/2132191.html
题目来自:中视广信2013笔试题
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象,才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
总结:
HashSet无序
TreeSet有序
二者里边不能有重复的对象
=====================================他们的用法======================
1、在HashSet中如何确定对象的唯一呢,在进行集合的操作时,用equal方法来判断对象是否唯一。这里要强调的是,在java里千万要警惕 == 操作符,==是判断两个对象的物理地址的,没有任何业务意义。
源代码如下:
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Test4_HashSet { private HashSet<Users> usersSet = new HashSet<Users>(); private void printElement(Set usersSet){ Iterator it = usersSet.iterator(); while(it.hasNext()){ System.out.println(((Users)it.next()).toString()); } } public static void main(String[] args) { Test4_HashSet t4 = new Test4_HashSet(); for(int i=0;i<10;i++){ Users users = new Users("users"+i); t4.usersSet.add(users); } //添加相同字符串users5的对象,要保证HashSet内对象唯一,需重写HashSet中对象继承自Object的equals()和hashCode()方法 Users users = new Users("users"+5); t4.usersSet.add(users); System.out.println("****"+t4.usersSet.size()); t4.printElement(t4.usersSet); } } class Users{ private String usersName; public Users(String usersname){ this.usersName = usersname; } public String getUsersName() { return usersName; } public void setUsersName(String usersName) { this.usersName = usersName; } public String toString(){ return usersName; } //若想实现HashSet中对象的唯一性判断,必须使用对象中的唯一性属性生成hashCode,如usersName.hashCode() @Override public int hashCode() { return usersName.hashCode(); } @Override public boolean equals(Object obj) { return usersName.equals(((Users)obj).getUsersName()); } }
----------------------------------------------------------------------------
2、TreeSet的用法
import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Test4_TreeSet { /** * 通过这个程序,还可以测试树集的添加元素的无序性与输出的有序性 */ private Set<User> userSet = new TreeSet<User>(); private void printElement(Set userSet){ Iterator it = userSet.iterator(); while(it.hasNext()){ System.out.println(((User)it.next()).toString()); } } public static void main(String[] args) { Test4_TreeSet t4 = new Test4_TreeSet(); for(int i=0;i<10;i++){ User user = new User("user"+i); t4.userSet.add(user); } User user = new User("user"+5); t4.userSet.add(user); System.out.println("****"+t4.userSet.size()); t4.printElement(t4.userSet); } } /** *TreeSet.add(Comparable o),该方法添加的对象必须实现Comparable接口,否则会报错 *若想实现TreeSet中的对象在插入时自动排序,也必须实现Comparable接口,覆盖compareTo()方法 **/ class User implements Comparable{ private String userName; public User(String username){ this.userName = username; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String toString(){ return userName; } @Override public int compareTo(Object o) { return userName.compareTo(((User)o).toString()); } }
参考链接:
http://blog.csdn.net/woisnong/article/details/7433453
http://mahilion.blog.163.com/blog/static/1830872952011429112232362/
http://hi.baidu.com/alexandrae2008/item/d770bc871caf285e26ebd9ca
http://www.cnblogs.com/jcli/archive/2011/08/09/2132191.html
题目来自:中视广信2013笔试题
发表评论
-
(转)Spring声明式事务配置详解
2013-11-11 16:45 1796Spring声明式事务功能应该是大家应用Spring中使用的最 ... -
(转)Java几款性能分析工具的对比
2013-11-01 14:26 986来源:http://www.javaweb.cc/langua ... -
HashMap的遍历
2013-11-01 14:15 8341、新建一个HashMap Map<Integer , ... -
java将汉子转换成汉语拼音
2013-11-01 13:51 906import net.sourceforge.pinyin4j ... -
Spring加载properties文件的两种方式
2013-10-31 10:05 0在spring中可以通过下面的方式将配置文件中的项注入到配置中 ... -
动态加载spring .xml中的bean对象
2013-10-30 15:27 0在java中如何取得spring.xml中加载的bean对象? ... -
(转)Spring mvc+hibernate+freemarker(实战)
2013-10-28 19:40 928http://zz563143188.iteye.com/bl ... -
(转)Java之美[从菜鸟到高手演变]系列之博文阅读导航
2013-10-28 17:00 1675Java之美[从菜鸟到高手演变]系列之博文阅读导航 http: ... -
(转)openssl 制作证书和签名java方法
2013-10-28 15:03 0Win32OpenSSL_Light-0_9_8k.exe ... -
(转)面向接口编程详解
2013-10-25 12:34 5老文章,自己学习。 面向接口编程详解(一) http://w ... -
(转)Java架构师之路:JAVA程序员必看的15本书
2013-10-08 18:24 0作为Java程序员来说,最 ... -
Java获取CPU ID和磁盘ID
2013-09-25 20:18 0原文链接:http://www.rgagnon.com/jav ... -
Java编程之备用程序段
2013-09-25 14:57 0记录一些程序段,供日常备用,持续增加中…… 1. Java中 ... -
(转)Java编程之AOP
2013-09-25 14:45 0链接: http://hw19886200.iteye.com ... -
Java编程之性能优化
2013-09-25 14:28 736最近的机器内存又爆满 ... -
使用axis2传输附件
2013-09-25 10:40 1018服务端Service文件: import java.io. ... -
Java应用程序项目打包成exe文件
2013-09-23 09:16 01.程序打包 首先将程序打成Jar包,打包命 ... -
(转)Java事务处理类型及差异总结
2013-09-18 13:54 1578一、什么是Java事务 ... -
JAVA文件_加密
2013-09-13 16:09 0import java.awt.*; import java ... -
(转)Java 实现Rsa 加密
2013-09-13 16:08 0import java.io.*; public class ...
相关推荐
NULL 博文链接:https://elvin-chu.iteye.com/blog/1942033
HashSet和TreeSet的区别
HashSet和TreeSet_围墙之外.rar
主要介绍了详解Java中HashSet和TreeSet的区别的相关资料,需要的朋友可以参考下
主要介绍了HashSet和TreeSet使用方法的区别解析,具有一定借鉴价值,需要的朋友可以参考下
day18-集合-中(HashSet&TreeSet&比较器).zip
简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个对
treemap treeset hashset hashmap 简要介绍
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
HashTable不支持空键值对! 而HashMap支持空键值对!
java集合在日常开发中经常用到,对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,...
1) 掌握Java集合框架的概念以及几种具体实现:ArrayList, LinkedList, HashSet, TreeSet, PriorityQueue; 2) 掌握Java集合框架的映射的概念以及映射的两种基本实现:HashMap,TreeMap; 3)掌握枚举类型以及枚举集...
HashSet的实现原理 ,HashSet与HashMap的区别 以及 HashSet的底层实现方式
这篇集合总结一共包括十二节,介绍了一些接口和实现类的底层源码以及基本的增加、删除元素等的操作(包括List、Map、Set接口、ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类)。...
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考
HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator ...
Java数据结构--13.Java8数据结构TreeSet 前⾔ ,上⼀篇中对 Set 接⼝最终实现类 HashSet 与 LinkedHashSet 做了介绍与分析,本篇将对另⼀种 Set 接⼝的最终实现类 TreeSet 进⾏ 介绍与分析。 先来看下 TreeSet 完整...