java linkhashset_java中集合怎么定义
LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,也就是我们插入的顺序。
并且linkedHashSet是一个非线程安全的集合。如果有多个线程同时访问当前linkedhashset集合容器,并且有一个线程对当前容器中的元素做了修改,那么必须要在外部实现同步保证数据的冥等性。
下面我们new一个新的LinkedHashSet容器看一下具体的源码实现。并分析师如何保证数据的插入顺序:
Set<String> set = new LinkedHashSet<>();
跟进LinkedHashSet可以得到super一个父类初始化为一个容器为16大小,加载因子为0.75的Map容器。
构造一个空连接散列集合
实际创建的是一个LinkedHashMap带有制定大小和加载因子的容器。
在前面讲过一次,map的容器的大小必须是2的冥,那么在讲一次如何保证必须是2的冥,通过我们传入的参数在构建map集合的是通过位运算实现:
其中initialCapacity为我们传入的具体按容器的大小。
上面是我们描述的LinkedHashSet的具体构建过程,以及构建的具体内容。
由于LinkedHashSet是一个哈希表和链表的结合,且是一个双向链表,那么我们来看一下什么是双向连边?
双向链表是链表的一种,他的每个数据节点都有两个指针分别指向直接后继和直接前驱,所以从双向链表的任意一个节点开始都可以很方便的访问它的前驱节点和后继节点。这是双向链表的优点,那么有优点就有缺点,缺点是每个节点都需要保存当前节点的next和prev两个属性,这样才能保证优点。所以需要更多的内存开销,并且删除和添加也会比较费时间。
下面我们图示一个双向两表的节点:
多个节点相互连接,保证了数据录入的顺序。
那么我们源码分析一下具体的录入详情:
我们定义一个LinkedHashSet—LinkedHashSet<String> set = new LinkedHashSet<>();
然后set.add();跟一下这个add是走的那个方法:
跟进来走的是put的方法:LinkedHashSet.class下的,这个是重写了超类中put的具体add方法。他会在新分配的元素在链表的末尾插入一条。
进来走的还是HashMap的put添加方法,在上面的判断和计算hash确定位置之后,由于LinkedHashSet重写了addEntry
在元素的后面添加新的元素。
整个过程就是LinkedHashSet在容器插入数据的过程。此过程主要由LinkedHashSet.class中重写超类的两个addEntry和createEntry 实现双向链表的结构。保证数据已我们录入的顺序遍历输出。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182772.html原文链接:https://javaforall.cn
相关文章
- java集合概念_java多线程
- 怎么用命令提示符运行JAVA代码_java命令提示符如何进入
- java怎么调用.asmx_Java调用Webservice(asmx)的例子
- java数组定义长度_JAVA数组的定义
- java integer long 转换_long(Long)与int(Integer)之间的转换
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- Java商城源码最好用的java商城电商系统之一
- java语言算法描述_六大java语言经典算法[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java后台怎么解密md5,Java md5 密码加解密
- java网页安全提示_win7系统打开网页提示“应用程序已被JAVA安全阻止”的解决方法…
- 【说站】java SPI如何定义接口
- 【说站】java数组引用如何实现
- JAVA数据库连接池_java与数据库的连接怎么实现
- Jakarta EE 10发布,开启云原生Java时代
- java list 转json 字符串_Java之JSON字符串与List集合之间相互转换
- java 设置400错误_Java项目报400错误的原因与解决方法
- JAVA代码审计之java反序列化
- redis Java工具类详解大数据
- 生成验证码的java类详解编程语言
- Java程序员必备知识,《JAVA编程思想》包和访问权限详解编程语言
- Java监控Oracle性能的最佳实践(java监控oracle)
- Java学习Linux基础的必要性(java要学linux)
- Java技术封装Redis,打造高效数据处理系统(java封装redis)
- Java工程师集MySQL技能于一身(java工程师mysql)
- 客户端Java客户端快速关闭Redis连接(关闭redis的java)
- Java经理与员工的差异实现方法