今天在写代码时遇到了HashSet,由于之前并不了解,就在网上查了一下原理及使用方法。
HashSet原理
该类实现了Set接口,HashSet中不允许元素重复,不保证集合中元素的顺序,元素可为null,但最多只能一个。对于 HashSet 而言,HashSet继承自AbstractSet,它是基于 HashMap 实现的,HashSet 底层使用HashMap来保存所有元素。因此HashSet的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成。
常用方法
构造方法:
默认构造器:
public HashSet() { map = new HashMap<>(); }
将传入的集合添加到HashSet的构造器
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)
}
仅明确初始容量的构造器(装载因子默认0.75
public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); }