首页 > 代码库 > Java集合-(Set)

Java集合-(Set)

今天又复习Java的集合类,相比之前的学习,又有了许多收获,而且时记到脑子里边了,或者是要坚持写博客的缘故把。

进入正题,首先是要搞清Collection和Collections,Collection是List,set和Queue接口的父接口,而Collections是一个操作集合的工具类。

集合体系知识如下:

技术分享

首先说Set集合:Set集合类似于一个蜜罐,可以把多个对象丢进去,而Set不能够记住添加元素的顺序。Set集合与Collection基本相同,没有提供额外的方法,也可以说Set就是Collection。如果add()相同的元素,会返回flase,添加失败。

HashSet:HashSet按照Hash算法来存储结合中的元素,因此具有良好的存取和查找的性能。

LinkedHashSet:使用连表来维护元素,因为需要维护元素的插入顺序,所以性能略低,低于HashSet。

TreeSet:采用红黑树的数据结构来存储集合元素,并且支持两种排序方法,自然排序和定制排序。注意:使用TreeSet时,保证添加的对象全都实现了Comparable接口,否则会添加失败,并且抛出ClassCastExecption异常。简单一句话,如果想要TreeSet正常运行,只能添加同一种类型的对象。

EnumSet:为枚举类设计的集合类。内部以向量的形式存储,存储形式非常紧凑,所有Enumset在对象占用内存小,而且效率高。

各Set实现类性能分析:HashSet性能总是高于TreeSet,如果想要保持排序的set,采用TreeSet。LinkedHashSet对于普通的插入删除来说比HashSet略微慢一点,但是有了连表,遍历LinkedHashSet会更快,EnumSet是Set实现类中性能最好的,但是只能保存同一类型的元素。并且所有的set实现类都是线程不安全的。

参考资料:李刚大叔的《疯狂Java讲义》

Java集合-(Set)