HashSet
- 扩展 AbstractSet 并实现 Set 接口,创建一个使用散列表存储的类集,而散列表(哈希表)通过被称作散列法的机制来存储信息;
- 散列法:一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashCode),散列码被用来当做与关键字相连的数据的存储下标,关键字到其散列码是自动执行的,因此看不到散列码本身,代码也不能直接索引散列表,大的集合也能使 add(),contains(),remove(),size() 等方法的运行时间不变;
- HashSet 调用元素时会调用 hashCode() 方法,获得其哈希码(hashCode),根据哈希码确定在集合中的存储位置,提高了存储速度;
- HashMap 对象的 key、value 值均可为 null,但允许最多一个值为 null 的元素;
- HashSet 不能确定元素的排列顺序,通常无法干预排列集合的创建,如果要排序,建议使用 TreeSet;
1. 构造方法
构造方法 |
说明 |
HashSet() |
构造一个空的 Set 集合 |
HashSet(Collection c) |
构造一个包含指定集合的元素的集合 |
HashSet(int capacity) |
构造一个指定初始容量的 Set 集合 |
HashSet(int capacity, float fillRatio) |
指定容量与填充比(又称加载容量),填充比必须介于 0.0 与 1.0 之间,决定散列集合向上调整大小之前有多少被填满,当元素个数大于 散列表容量 x 填充比 时,散列集合被扩大,默认值是 0.75 |
2. 去除重复元素的原理
3. 类的使用
import java.util.HashSet;
import java.util.Iterator;
public class test {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("12");
hs.add("34");
hs.add("56");
hs.add("12");
System.out.println(hs.size());
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.print(it.next()+" ");
}
}
}
4. LinkedHashSet
详细:LinkedHashSet 链式哈希集合