集合(四)Set

一、比较三个类

1.HashSet:最常使用

HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。

在内存中的存取是无序且不连续的,不是线程安全的,集合元素可以是null

判断的过程是先通过hashCode方法看在不在一个内存位置,在看equals方法看是不是一个对象。是的话就不添加,不是的话就七上八下的添加在列表里面。(因此在jdk7中底层都是数组+链表的实现)

2.LinkedHashSet:

其实是HashSet的子类,就是多了个链表维护存入的顺序

LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能,也就是频繁遍历选择linked的。

3.TreeSet

底层是红黑树,和前面两个其实都不一样。(大小堆)

TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。

有两种排序:如果return 0 则判断为相等,不会重复添加

1.自然排序其实就是放进treeset中的元素继承了comparable接口,重写compareTo方法。

2.定制排序就是new一个comparetor类重写compare方法,然后把这个对象放到treeset(com)的构造函数中。

新增的方法如下: (了解)

Comparator comparator()

Object first()

Object last()

Object lower(Object e)

Object higher(Object e)

SortedSet subSet(fromElement, toElement)

SortedSet headSet(toElement)

SortedSet tailSet(fromElement)

二、必须符合的条件

像set中加元素必须重写equals方法和hashCode方法

treeSet的话还必须继承comparable接口重写compareTo方法,并且treeSet里面由于要排序所以一定得放同样的元素

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容