下面的这个就是我们的linkedhashset的结构示意图,和我们之前介绍的这个hashset相比之下,这个linkedhashset的区别就是我们的这个linkedhashset是一个双向链表的结构;
下面的这个我们是首先插入了一个AA这个内容,然后是插入这个456,接着插入456这个时候可能计算这个hash值之后这个就无法继续插入了,因为这个已经存在了,我们创建一个新的对象,然后添加这个123,hsp这个字符串,在这个过程中,我们每一次添加一个元素,这个元素就会和上一个加入的数据构成双向的链表;
因此这个
插入和打印输出的顺序问题:我们上次介绍的这个hashmset插入数据的顺序和我们的打印输出的顺序是一致的,就是因为我们的这个链表是一个双向的链表,这个节点的顺序就是确定的;
linkedhashset底层就是linkedhashmap(这个是hashmap的子类);
entry是这个底层的数据类型,table数组是这个node类型的,因此两者之间应该是存在某种关系的,table数组的最开始的大小就是16,和我们之前介绍的这个hashset最开始的空间大小是一样的;
我们的这个每一个数据entry就是我们的这个linkedhashmap的子类,因此我们的这个table数组是node类型的,我们的这个hashmap.node可以通过这个hashmap类进行访问,因此这个node类就是一个静态内部类(不属于对象,而是属于这个类,可以直接使用类进行访问)相当于这个entry是我们的这个hashmap下面的静态内部类node的一个子类;
下面的这个table就是我们的数组node类型的,0表示的就是数组下标entry类型的:
双向链表的节点之间连接方式,在这个调试过程中也是可以看到的,就是这个before和after,在我们插入第一个数据的时候,两个都是空的,当我们插入第二个数据的时候,这个里面的after就已经有了自己的指向,就不是null了,而是指向新的位置;
我们的这个table还是数组,是node类型的,这个里面的数组元素是node类型的;
我们可以看到这个node实际上是实现了这个entry这个接口的,这个静态类里面包含了这个hash,key,value和我们的next指针指向下一个元素;
下面的这个就是数组是node类型的,我们通过转换为这个entry放到这个set里面去,然后这个set里面有这个set(引用)和collection方便对于我们的键和值进行管理;
下面的这个是往这个集合里面添加了两个基本的数据和这个new的对象;
我们可以看到,我们添加基本的数据的时候,还不可以从这个地址上面看到这个引用的关系,但是当我们new这个对象的时候,就会发现这个entryset里面的这个元素的地址和我们的这个table元素的这个对应的地址是一样的,因此可以证明这个就是一个引用的指向关系,这个entryset指向了这个hashmap$node里面的对应的位置;
深度分析:
entry的实例化对象可以赋值给这个hashmap$node的接口(这个是接口的一个规则语法);
下面的就是使用增强for和迭代器两个方式,通过拿到这个key,使用这个对应的方法得到这个values;
这个里面就是直接调用这个map.values方法得到这个values数值,然后使用两个方式进行这个结果的打印输出;
我们下面的这个就是上面介绍的这个实现接口的是类的实例化对象可以传递给这个接口,但是我们需要把这个数据强制转换为这个map.entry类型的;
然后这个entry就可以去调用这个getkey和getvalue方法得到这个对应的键值情况;
hashmap扩容原理和之前的这个hahset完全一样;
这个主要是一个怎么样的过程呢?就是:
properties是我们的hashtable的子类,里面的这个数据也是k-v,里面数据也不可以是空的数据,如果相同的这个key后插入的这个value也会把原来的替换掉的;
properties通过这个get方法得到一个k-v里面的这个value数值,remove就是删除这个数据,因为两个相同的key也会把原来的value覆盖,因此可以使用插入相同的这个key去修改这个value数据内容;
学习了这么多的这个集合类型,我们如何进行选择:
首先判断这个是单列还是双列(k-v形式);
单列里面根据这个是否可以进行重复,分为了这个list和set结构,根据这个是否可以进行排序,分为了这个hashset和treeset结构;
在这个双列的结构里面,我们根据这个是不是有序的,是否可以进行排序,分为这个hashmap和treemap结构;
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有