资讯专栏INFORMATION COLUMN

Java容器类研究7:Set

RdouTyping / 344人阅读

摘要:继承自,继承接口,接口继承自。的也是使用的的的。中和方法理论上是常数时间的复杂度,前提是元素在中分散比较均匀。并且这些元素在结构中,根据进行了排序,所以用遍历时可以按照递增递减顺序。遍历访问元素的操作比更为高效,时间由元素数量决定。

java.util.Set

HashSet继承自AbstractSet,继承接口Set,Set接口继承自Collection。

null是否可以放在Set中

null可以放在Set中,并且最多只能有一个。null的hashcode是0。

HashSet用什么结构实现的

HashSet用了一个HashMap。。。该HashMap默认的负载因子是0.75。

需要存入的对象作为HashMap的key存入,而value使用了一个公共静态的ObjectPRESENT来填充。

HashSet的iterator也是使用的HashMap的key set的iterator。

HashSet中add、remove和contains方法理论上是常数时间的复杂度,前提是元素在bucket中分散比较均匀。迭代访问其中元素的时间,则是元素数量+bucket容量,所以在迭代访问操作比较重要时,不要将set的容量初始为很大。

HashSet不是线程安全的

将其变为一个线程安全set的官方方法是:

Set s = Collections.synchronizedSet(new HashSet(...)
TreeSet是用什么结构实现的

不出所料,是用TreeMap实现的。并且这些元素在结构中,根据comparator进行了排序,所以用iterator遍历时可以按照递增、递减顺序。

comparator在TreeSet中是比较关键的,这些元素要么是comparable,要么自己提供一个定制的comparator。并且comparator的实现一定要和equals方法一致。

对于add、remove和contains方法,理论上是log(n)时间复杂度。

LinkedHashSet与HashSet的区别

LinkedHashSet继承自HashSet,但是记录了元素的插入顺序,仍然具有原来HashSet常数时间复杂度操作的优势,但是这些操作会比原来慢一些,用来维护这个顺序。遍历访问元素的操作比HashSet更为高效,时间由元素数量决定。

一样,LinkedHashSet用LinkedHashMap来实现。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67868.html

相关文章

  • Java 基础 | Collection 集合概览

    摘要:说到复盘基础,并不是所有的都会复盘,没那个时间更没那个必要。比如,一些基础的语法以及条件语句,极度简单。思前想后,我觉得整个计划应该从集合开始,而复盘的方式就是读源码。通常,队列不允许随机访问队列中的元素。 ​showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老读者都知道,我是自学转行...

    codergarden 评论0 收藏0
  • Java容器研究1:Collection

    摘要:集合类关系是和的父接口。相等必须是对称的,约定只能和其它相等,亦然。和接口在中引入,这个单词是和的合成,用来分割集合以给并行处理提供方便。这些并不立即执行,而是等到最后一个函数,统一执行。 集合类关系: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ...

    AprilJ 评论0 收藏0
  • Java容器研究2:List

    摘要:在中引入该方法,用来替换中的每个元素。的方法,只能在或之后使用,也就是确保当前指向了一个存在的项。这里使用了,该方法可以将非对象先映射为型,然后进行比较。存储的是有序的数组,所以划分时会按照顺序进行划分。 java.util.List replaceAll 在Java8中引入该方法,用来替换list中的每个元素。 default void replaceAll(UnaryOpe...

    zzzmh 评论0 收藏0
  • 一名3年工作经验的java程序员应该具备的职业技能

    摘要:一名年工作经验的程序员应该具备的技能,这可能是程序员们比较关心的内容。数据结构和算法分析数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中能派上用场。 一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。 1、基本语法 这包括...

    renweihub 评论0 收藏0
  • Java learn 03 常用 & 容器 (待补充笔记)

    摘要:容器的类图如下图所示接口定义了存取一组对象的方法其子接口和分别定义了存储方式。中的数据对象没有顺序且不可以重复。注意相等的对象应该具有相等的 Chap 6 常用类 focus on : 字符串相关类 (String, StringBuffer) 基本数据类型包装类 Math类 File类 枚举类 6.1 字符串相关类 String 类 -- java.lang.String 类...

    bladefury 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<