HashSet在java集合体系中的继承实现关系。
HashSet实现Set接口,由哈希表(实际为HashMap实例)支持。
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
HashSet继承至AbstractSet,并且实现了Set,Cloneable以及java.io.Serializable接口,所以它支持可复制以及序列化操作。
底层以哈希表为支持(HashMap为实例)。
private transient HashMap<E,Object> map;
HashSet提供了四种HashSet的构造方式
构造一个新的空集合; HashMap实例具有默认初始容量(16)和负载因子(0.75)。
public HashSet() {
map = new HashMap<>();
}
构造一个包含指定集合中的元素的新集合。
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
构造一个新的空集合; HashMap实例具有指定的初始容量和默认负载因子(0.75)。
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
构造一个新的空集合; HashMap实例具有指定的初始容量和指定的负载因子。
public HashSet() {
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
返回此集合中元素的迭代器。 元素没有特定的顺序返回。
public Iterator<E> iterator() {
return map.keySet().iterator();
}
返回此集合中的元素数。
public int size() {
return map.size();
}
如果此集合不包含元素,则返回 true 。
public boolean isEmpty() {
return map.isEmpty();
}
如果此集合包含指定的元素,则返回true 。
public boolean contains(Object o) {
return map.containsKey(o);
}
将指定的元素添加到此集合(如果尚未存在)。
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
如果存在,则从该集合中删除指定的元素。
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
清空集合中的元素
public void clear() {
map.clear();
}
返回此 HashSet实例的浅层副本:元素本身不被克隆。
public Object clone() {
try {
HashSet<E> newSet = (HashSet<E>) super.clone();
newSet.map = (HashMap<E, Object>) map.clone();
return newSet;
} catch (CloneNotSupportedException e) {
throw new InternalError(e);
}
}
可以看到HashSet中的方法都是在HashMap的基础上进行操作的。
LinkedHashSet是HashSet的一个子类,它使用一个双向链表维护集合,使得LinkedHashSet具有有序性(插入元素的顺序)。
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
LinkedHashSet继承至HashSet,并且实现了Set, Cloneable, java.io.Serializable接口,具有Set集合不重复的特点和可复制、可序列化的性质。
构造方法
LinkedHashSet中提供了四种构造方法:
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);
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/121650523
内容来源于网络,如有侵权,请联系作者删除!