HashSet,TreeSet 和 LinkedHashSet比较
2015-04-09 13:22
417 查看
一、Set回顾
一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合。Set不包含满a.equals(b) 的元素对a和b,并且最多有一个null。
泥瓦匠的记忆宫殿:
1、不允许包含相同元素
2、判断对象是否相同,根据equals方法
二、HashSet
一个按着Hash算法来存储集合中的元素,其元素值可以是NULL。它不能保证元素的排列顺序。同样,HashSet是不同步的,如果需要多线程访问它的话,可以用 Collections.synchronizedSet 方法来包装它:要注意的地方是,HashSet集合判断两个元素相等不单单是equals方法,并且必须hashCode()方法返回值也要相等。看下面的例子:
HashSetObj 类满足我们刚刚的要求,所以集合中只有一个且它的HashCode值为2。
HashCodeObj 类虽然它们HashCode值为1,但是他们不相等。(其实当HashCode值一样,这个存储位置会采用链式结构保存两个HashCodeObj对象。)
同样,EqualsObj 类他们相等,但是他们HashCode值不等,分别为1471cb25、3acff49f。
因此,用HashSet添加可变对象,要注意当对象有可能修改后和其他对象矛盾,这样我们无法从HashSet找到准确我们需要的对象。
三、LinkedHashList
HashSet的子类,也同样有HashCode值来决定元素位置。但是它使用链表维护元素的次序。记住两个字:有序。有序的妙用,复制。比如泥瓦匠实现一个HashSet无序添加,然后复制一个一样次序的HashSet来。代码如下:
四、TreeSet
TreeSet使用树结构实现(红黑树),集合中的元素进行排序,但是添加、删除和包含的算法复杂度为O(log(n))。举个例子吧,首先我们定义一个Bird类。(鸟是泥瓦匠最喜欢的动物)
java.lang.Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
修改Bird如下:
针对上面三种Set集合,我们对它们的Add方法进行性能测试:
六、总结
HashSet:equlas hashcodeLinkedHashSet:链式结构
TreeSet:比较,Comparable接口,性能较差
相关文章推荐
- Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
- HashSet,TreeSet 和 LinkedHashSet比较
- Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
- HashSet、TreeSet、LinkedHashSet三者比较
- Java 之HashSet、LinkedHashSet、TreeSet比较
- HashSet,LinkedHashset,TreeSet的比较
- ArrayList与LinkedList、TreeSet与HashSet、HashMap与LinkedHashMap之间的比较
- java集合类,List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet),Map集合比较
- Java中类Set的子类HashSet、TreeSet、LinkedHashSet的差异化比较
- 初学Java,比较HashSet,LinkedHashSet,TreeSet,EnumSet(二十七)
- 示例比较HashSet,LinkedHashSet,TreeSet
- ArrayList与LinkedList、TreeSet与HashSet、HashMap与LinkedHashMap之间的比较
- HashSet、LinkedHashSet、TreeSet使用区别
- 搞懂JAVA集合类--HashSet, LinkedHashSet, TreeSet(五)
- java(20130802)Set:HashSet TreeSet、Map(接口):HashTable Hashmap、比较list set map
- HashSet,TreeSet和LinkedHashSet的区别
- HashSet,TreeSet和LinkedHashSet的区别
- HashSet、LinkedHashSet、TreeSet使用区别
- java基础(6)--java中HashSet、LinkedHashSet、TreeSet、ArrayList、ArrayDeque、LinkedList使用区别
- 【Java】常见的Set类型,HashSet、TreeSet、LinkedHashSet