Set接口介绍
set接口的实现类:HashSet、LinkedHashSet和TreeSet
Set接口特点:数据是不能重复的、最多可以存储一个null值
Set接口提供的方法API:

HashSet集合
hashSet介绍
HashSet <String> hashSet = new HashSet <String>();
hashSet.add("语文");
hashSet.add("数学");
hashSet.add("英语");
hashSet.add("语文");
hashSet.add(null);
//语文 大物 英语 数学 null
通过验证:
1、HashSet不能保证数据有序
2、HashSet数据是不能重复的
3、HashSet是可以存储null值
底层数据结构:
电脑中:
内存:高速存储、访问快,数据不能持久
磁盘:存储() 能持久化
hashSet属性:
//map属性是存储数据的,是HashMap类型的数据
private transient HashMap<E,Object> map;
//PRESENT属性,
private static final Object PRESENT = new Object();
HashSet底层实现是基于HashMap来实现的,将set中存储的值作为HashMap的key来处理,PRESENT是一个填充的value值
HashMap的构造函数
public HashSet() {
map = new HashMap<>();
}
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
HashSet方法:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
HashSet应用场景:
在做数据去重的场景下使用
LinkedHashSet:
LinkedHashSet <String> hashSet = new LinkedHashSet <String>();
hashSet.add("语文");
hashSet.add("数学");
hashSet.add("英语");
hashSet.add("语文");
hashSet.add(null);
LinkedHashSet特点:
1、数据有序
2、数据不能重复
3、数据是可以存储null的
LinkedHashSet的源码实现:
public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
public LinkedHashSet() {
super(16, .75f, true);
}
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
}
通过声明形式可知:其继承自HashSet,其继承了HashSet中所有的属性和方法
构造函数调用父类HashSet中方法如下:
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new <>(initialCapacity, loadFactor);
}
LinkedHashSet的实现是基于LinkedHashMap来实现的
LinkedHashSet数据有序的特征是基于LinkedHashMap来保证的,其底层利用双向链表来实现的数据有序
LinkedHastSet的应用场景:
在去重的基础上数据有序
TreeSet
TreeSet <Integer> treeSet = new TreeSet <Integer>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(6);
treeSet.add(1);
treesSet特点:
1、数据自然有序(自定义排序,实现Comparator接口)
2、数据不能重复
3、数据不能为null
通过源码可知:TreeSet底层是基于treeMap来实现的
TreeSet引用场景:
数据需要去重,且数据按照特定大小进行排序
版权声明:本文为weixin_49263647原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。