zoukankan      html  css  js  c++  java
  • HashSet源码分析


    title: HashSet源码解析
    date: 2018-08-09 16:00:26
    tags: java

    1. 引言

    HashSet 实现了 Set 接口,底层的数据结构是一个 哈希表(实际上是一个 HashMap 实例),所以,要了解 HashSet,最主要的还是要了解 HashMap,有关 HashMap 源码分析可以看 这篇文章。HashSet 主要有以下特点:

    • 因为底层的数据结构是 HashMap,所以允许 null 值的存在。
    • 因为底层的 HashMap 会重新构造 hash table 的大小,因此并不能保证迭代的顺序和存储顺序一致。
    • HashSet 所有的元素存在 HashMap 的 key 中,对应的 value 是一个静态变量 private static final Object PRESENT = new Object(),因为 HashMap 中 key 是唯一的,因此 HashSet 不允许存在重复值。
    • 它并不是同步的,JDK 提供了这样的方法可以创建出一个同步的 HashSet:
      Set set = Collections.synchronizedSet(new HashSet())
    • iterator 方法返回的是迭代器是 fail-fast,在创建了迭代器之后如果对该 HashSet 进行修改的话(除非是代用迭代器自己的 remove 方法),将会抛出 ConcurrentModificationException。

    2. 常规操作

    HashSet 的增删改等操作都是调用 hashMap 来完成的,因此不再做过多的分析

    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }
    
    public int size() {
        return map.size();
    }
    
    public boolean isEmpty() {
        return map.isEmpty();
    }
    
     public boolean add(E e) {
         return map.put(e, PRESENT)==null;
     }
    。。。
    
  • 相关阅读:
    主题样式切换代码:jQuery Theme Switcher
    MongoDB北大绿卡之安全建议
    Sketch 快速创建调色板技巧(PS 同样适用)
    你未必知道的12个JavaScript技巧
    js 面向对象 打气球小游戏
    js 行走的小女孩 面向对象
    js 小练习题
    css 实现九宫格
    JDK java version "1.8.0_181"环境搭建
    juery 弹出框
  • 原文地址:https://www.cnblogs.com/firepation/p/9449944.html
Copyright © 2011-2022 走看看