Java集合之HashSet

Posted

tags:

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

由于HashSet是基于HashMap的,理解HashMap就等于理解了HashSet,所以这篇文章就不上源码了

  • 键值都是PRESENT,就是一个new Objcet
  • PUT 操作 : return map.put(e,PRESENT) == null
  • REMOVE操作: return map.remove(o) == PRESENT
  • 遍历
       set.iterator
       set.toArray
  • Map 的 put() 方法在添加一个新的键时会返回 null,在更新一个已经存在的键关联的值时会返回旧值。因而 Set 中的 add() 方法可以据此判断新加入的元素是否改变了集合,如果改变了就返回 true。因而 PRESENT 不可以使用 null 。
  • Map的Key值可以为null , 所以hashset也可以包含null值
  • HashSet , LinkedHashSet, TreeSet 都不是线程安全的,在多线程环境下使用时要注意同步问题。
    CopyOnWriteArraySet 是一个线程安全的实现,但是并不是基于 Map 实现的,而是通过 CopyOnWriteArrayList 实现的。使用 addIfAbsent() 方法进行去重,性能比较一般。
  • Set 的内部通常是基于 Map 来实现的,Map 中的 Key 构成了 Set,而 Value 全部使用一个无意义的 Object 。 Set 的特征与其内部的 Set 的特征是一致的。基于 HashMap 的 HashSet 是无序时的最佳通用实现,基于 LinkedHashMap 的 LinkedHashSet 保留插入或访问的顺序,基于 TreeMap 的 TreeSet 可以按照元素升序排列,要求元素实现 Comaprable 接口或自定义比较器。
?

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

死磕 java集合之HashSet源码分析

Java 之 HashSet 集合

java集合框架之HashSet

java集合之HashSet

java集合之HashSet

java集合之HashSet哈希SET基础