HashSet

Posted houchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashSet相关的知识,希望对你有一定的参考价值。


HashSet无序且不能重复

1、HashSet类的字段属性
//HashSet集合中的内容是通过 HashMap 数据结构来存储的
private transient HashMap<E,Object> map;
//向HashSet中添加数据,数据在上面的 map 结构是作为 key 存在的,而value统一都是 PRESENT(PRESENT 是一个静态常量 没什么作用)
private static final Object PRESENT = new Object();

2、 HashSet的构造函数
无参构造
public HashSet() {
  map = new HashMap<>();
}

指定初始容量
public HashSet(int initialCapacity) {
  map = new HashMap<>(initialCapacity);
}

指定初始容量和加载因子
public HashSet(int initialCapacity, float loadFactor) {
  map = new HashMap<>(initialCapacity, loadFactor);
}

构造包含指定集合中的元素
public HashSet(Collection<? extends E> c) {
  map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}

加载因子:在HashMap中,能够存储元素的数量是:总的容量*加载因子,新增一个元素时,如果集合中元素的个数
大于前面的计算结果时,那么就必须进行扩容操作,一般来说,加载因子都选默认的0.75


3.HashSet添加元素
public boolean add(E e) {
  return map.put(e, PRESENT)==null;
}
HashSet的元素是无序不可重复的,HashMap的key也是不可重复的,所以将要添加的元素 E e 作为


4、HashSet删除元素
public boolean remove(Object o) {
  return map.remove(o)==PRESENT;
}
调用 HashMap 的remove(Object o) 方法,该方法会首先查找 map 集合中是否存在 o ,如果存在则删除,并返回该值,如果不存在则返回 null。
也就是说 HashSet 的 remove(Object o) 方法,删除成功返回 true,删除的元素不存在会返回 false。

 

5、查找元素
public boolean contains(Object o) {
  return map.containsKey(o);
}
调用 HashMap 的 containsKey(Object o) 方法,找到了返回 true,找不到返回 false。


6、遍历元素
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
//增强for循环
for(Integer i : set){
  System.out.println(i);
}
利用迭代器进行循环
Iterator<Integer> iterator = set.iterator();
  while (iterator.hasNext()){
  System.out.println(iterator.next());
}

以上是关于HashSet的主要内容,如果未能解决你的问题,请参考以下文章

31.set集合与HashSet

java之集合类

hashset和treeset区别

HashSet和TreeSet的区别

Java之set源码分析

Java——HashSet和TreeSet的区别