HashSet: 基于散列表的Set集合

HashSet: 底层依靠 HashMap 来存储数据,例如 set.add("Hello World.")。

  • 允许存入 null 值;

  • 不允许重复,同一个对象最多存在一次;

  • 不保证其插入的顺序,其顺序可能随时间而发生变化。

优势/劣势

HashSet 底层使用HashTable来保证元素的不重复性,实际上使用的是HashMap的一个实例。

  • 优势:基于散列表,去重效率较高,支持 null 值;
  • 劣势:不支持排序,可使用 TreeSet 代替;

主要成员变量

private transient HashMap<E,Object> map; // 用于存储元素的 HashMap
private static final Object PRESENT = new Object(); // 作为 HashMap 的 value 值

直接源码开撸

因为 HashSet 底层使用 HashMap 来存储相应的元素,熟悉了 HashMap 之后,就能无压力掌握 HashSet;详见如下:

/**
 * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
 * default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
    map = new HashMap<>();
}

// 添加一个元素
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

可见其实现非常简洁,如果对HashMap不太熟悉的同学可以参考这篇文章

线程安全的Set

  • 官方建议方式:Set s = Collections.synchronizedSet(new HashSet(...))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址 Java集合 Java集合框架:是一种工具类,就像是一个容器可以存储任意数量的具有共同属性的对象。 Ja...
    gyl_coder阅读 4,520评论 0 8
  • 一、集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map;两者的区别: 1、Col...
    程序员欧阳阅读 13,972评论 2 61
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 5,947评论 0 13
  • 2018年要好好学习理财! 结婚后一直有在用手机app记账,坚持的比较好,每年用出去多少钱都知道!但是没手写下来没...
    啾啾626阅读 8,603评论 2 4
  • 希望每一个东西都能归位 希望叫一嗓子孩子就能行动起来 希望前面的人不要挡路 十有八九这些希望都会落空,叫十嗓子孩子...
    lanfang阅读 1,449评论 0 0