码迷,mamicode.com
首页 > 编程语言 > 详细

Java集合之HashSet

时间:2016-05-23 14:52:51      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

由于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

标签:

原文地址:http://www.cnblogs.com/yueyanglou/p/5519661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!