A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 广驰 中级黑马   /  2012-9-7 15:50  /  3082 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 应广驰 于 2012-9-7 17:10 编辑

Treeset和Hashset 这两个集合的区别我知道,基本就是底层数据结构的不同,还有Treeset是有序的,然后其他功能基本相似,那没什么时候用哪个集合比较合适呢,因为两个放入对象的时候都需要判断,效率应该差不多才对,相比起来Hashset就应该不是可以不用了么

7 个回复

倒序浏览
想排序用TreeSet   想存入不同的元素用HashSet(但是要重写hashcode和equals方法)
回复 使用道具 举报
方志亮 发表于 2012-9-7 15:59
想排序用TreeSet   想存入不同的元素用HashSet(但是要重写hashcode和equals方法)

TreeSet 也支持元素唯一性,因为都是set的子类啊
回复 使用道具 举报
效率怎么会差不多呢?差多了去了哦
如果一个集合中有10000个对象,要查找是否存在某个对象,如果一个一个去比较,效率是非常低下的
而HashSet中的内部算法,采用对某个数字进行取余的方式对哈希码进行分组,将10000个对象划分到不同的存储区域
当从HashSet集合中查找每个对象时,java会先用该对象的HashCode()方法获得该对象的哈希码,然后根据该对象的哈希码找到相应的存储区域
然后再在这个存储区域中再进行逐一比较,这样可以大大大大提高效率

Treeset和Hashset 这两个集合的区别除了底层数据结构不同,有序无序之外,还有一个重要的区别就是它们保证元素唯一性的方式不同
hashSet:判断判断元素的hashCode值是否相同,如果相同,调用元素自身的equals方法,是否为true
treeSet:有两种:1,现Comparable接口,覆盖compareTo方法,使其自身具备比较性
                        2,自身所具备的比较性不是需要的时,就需要让集合自身具备比较性,自定义比较器

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
hashSet的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较确定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。
但是hashSet增删的高效率是通过花费大量的空间换来的:因为空间越大,取余数相同的情况就越小。HashSet这种算法会建立许多无用的空间。
使用hashSet接口时要注意,如果发生冲突,就会出现遍历整个数组的情况,这样就使得效率非常的低。(就是楼上哥们的例子)
自定义类用TreeSet,与HashSet不同,TreeSet并不需要实现HashCode()和equals()。
只要实现compareable和comparTor()接口可以实现过滤功能。
HashSet底层上就是HashMap,有key值,没有value值。所以,TreeSet和TreeMap非常的耗时间,因此很少使用。
HashSet VS TreeSet:HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用,而且最好不要重复使用。
基于以上原因,我们尽可能的运用HashSet而不用TreeSet,除非必须排序。
同理:HashMap  VS  TreeMap:一般使用HashMap,排序的时候使用TreeMap。
HashMap VS Hashtable(注意在这里table的第一个字母小写)之间的区别有些类似于ArrayList和Vector,Hashtable是重量级的组件,在考虑并发的情况,对安全性要求比较高的时候使用。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
严学韦 发表于 2012-9-7 16:26
效率怎么会差不多呢?差多了去了哦
如果一个集合中有10000个对象,要查找是否存在某个对象,如果一个一个去 ...

嗯,对于查找来说这道是Hashset方便很多,谢了,很简单的事情,倒是我钻牛角尖了
回复 使用道具 举报
陈振兴 发表于 2012-9-7 17:07
hashSet的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较确定添加元素的 ...

写的很详细,对Hashset有了更深的了解。谢了
回复 使用道具 举报
应广驰 发表于 2012-9-7 17:13
写的很详细,对Hashset有了更深的了解。谢了

我今天也要泡论坛了,这些问题值得共同学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马