hashSet内部是利用hashMap实现的,将值存在hashmap的key上这也是为什么hashset不允许存取重复值得原因。数据结构 private transient HashMap<E,Object> map; // 与支持映射中的对象关联的虚拟值 ,map中的value,只是一个无意义的空对象 private static final Object PRESENT = new Object();默认的构造函数 public HashSet() { map = new HashMap<>(); }查询内容的时候实际是在map中查询key public boolean contains(Object o) { return map.containsKey(o); }增加的时候,在key的位置放置要存的值,在value中放置一个没有意义的空对象 public boolean add(E e) { return map.put(e, PRESENT)==null; }