java集合-Set
Set集合接口
如果是实现了 Set 接口的集合类,具备的特点:无序,不可重复
添加元素 的顺序与元素出来的顺序是不一致的。
注重独一无二的性质,该体系集合可以知道某物是否已经存在于集合中,不会存储重复的元素。
hashSet
HashSet 底层是使用了哈希表来支持的,特点: 存取速度快。
往Hashset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,
然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。
HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变,此类允许使用null元素。
在HashSet中,元素都存到HashMap键值对的Key上面,而Value时有一个统一的值private static final Object PRESENT = new Object();,(定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。)(后面的Set都是Map的深入理解,具体实现可以查看源码。)
LinkedHashSet
LinkedHashSet 底层使用 LinkedHashMap 来保存所有元素,它继承与 HashSet,其所有的方法操作上又与 HashSet 相同,因此 LinkedHashSet 的实现上非常简单,只提供了四个构造方法。
并通过传递一个标识参数,调用父类的构造器,底层构造一个 LinkedHashMap 来实现,在相关操作上与父类 HashSet 的操作相同,直接调用父类 HashSet 的方法即可。
treeSet
treeSet 底层是以红-黑树的数据结构实现的,默认对元素进行自然排序(String)。
如果在比较的时候两个对象返回值为0,那么元素重复。

浙公网安备 33010602011771号