首页 > 新闻资讯

hashmap怎么删除某个value hashmap实现了什么接口?

hashmap实现了什么接口?

map表示映射,接口指定了一组由键值对组织的集合。键必须是唯一的,并且映射中的数据可以t被排序,即地图中数据的顺序与数据放置的顺序无关。,它的基本操作是get和put,也就是put数据和fetch数据,我们通常通过按键得到它对应的valu

linkdhashset底层怎么实现元素有序?

从源代码角度追根究底linkedhashset!

首先看看linkedhashset类中的所有方法,发现都只是一些构造方法,没什么特别的。。spliterator方法只是一个迭代器!

hashmap怎么删除某个value hashmap实现了什么接口?

从构造函数中的超级方法点可以看出,构造函数中的父构造函数使用了linkedhashmap进行实例化,因此linkedhashset的特性必然与linkedhashmap密切相关,换句话说,linkedhashset的输出顺序来自于linkedhashmap

以下是对linkedhashmap的详细分析:

linkedhashmap继承hashmap并实现map。显然linkedhashmap也被认为是hashmap,保留了数组链表的结构。至于顺序的原因,肯定不会是因为map接口和继承hashmap,也就是说linkedhashmap的顺序肯定是在linkedhashmap类中实现的。

hashmap的底层数据结构是将数组中的位置作为桶,在每个桶中放一个链表(或者红黑树)。但是,hashcode落入的桶是不确定的,没有相关性,所以hashmap可以t以有序的输出,而linkedhashmap使用的是双链表形式。存储在map中的数据不仅使用链表来维护每个桶中的顺序,还维护每个值中的顺序。

借个图,如下:

而且linkedhashmap有两种迭代,一种是按插入顺序排序(迭代时像队列),另一种是按访问排序(像栈一样,最后一次访问放在栈头,可以实现为lru)。

下面分析主要的源代码:

1、先看linkedhashmap中的内部类条目:

entry继承自一个键值结构,比如node对象中的hash、key和值,next用作hashmap中的同一个bucket。表面的条目指向,linkedhashmap.entry新获取这些属性,并定义了两个新的属性,entrybefore,after,用来维护所有条目的一个点,成为一个双向链表。

其余的内部类,如linkedkeyiterator和linkedentryset,用作迭代器。

2、看linkedhashmap中的属性:

linkedhashmap中的主要属性有三个heads,tail(维护链表的头尾,很好理解),注释accessorder写的很清楚,即访问顺序为真,插入顺序为假;

3,linkedhashmap中的方法:①,put方法:我绕过linkedhashmap,没有找不到put方法。是用的hashmap的put方法吗?那条目链表是怎么做的呢?

从hashmap中的put方法可以看出,计算完哈希值后调用putval方法,生成新插入的元素时使用newnode方法。linkedhashmap不重写put方法,但重写newnode方法。从代码中,我们可以看到hashmap中的newnode方法。只是简单的new返回一个节点,linkedhashmap中的newnode方法不仅添加了对象,还调用了linknodelast将对象挂在链表的尾节点上形成链表。(顺便可以看出jdk中的数据结构将多态特性(重写后调用子类方法)运用的淋漓尽致)

和newnode方法类似的还有一个newtreenode方法,也是在hashmap中的put方法中调用的,也就是红黑树结构;

(2)、获取方法:

从get方法可以看出,如果accessorder为false,那么linkedhashmap使用的get方法与hashmap相同,计算对应的哈希值,比较键值(,等于),如果匹配则返回。如果accessorder为真,则调用afternodeaccess方法判断各种情况,然后将这个值设置为tail,保证是栈头的位置,下次会先找到。代码截图如上!

(3)、拆卸方法:

linkedhashmap中的remove方法和hashmap中的一样,只是hashmap中最后一个afternoderemoval方法的方法体是空的,而在l。inkedhashmap被重写,这个节点的最后一个节点连接到前一个节点,相当于解耦。。代码如下:

一般来说,linkedhashmap相比hashmap增加了链表特性,保持了元素的顺序。虽然大多数方法使用hashmap方法,但是在linkedhashmap中重写的多态特性是以不同的实现的。可以说这是我们在开发代码时应该学习的,以后可以通过重写一些方法来扩展其他类型的hashmap!

linkedhashmap说到这里,作者已经分享了很多java技术,其中很多都帮助了一些朋友!会继续分享,敬请关注。。。

linkedhashmap方法链表hashmap顺序

原文标题:hashmap怎么删除某个value hashmap实现了什么接口?,如若转载,请注明出处:https://www.suhaipipe.com/suhai1/33556.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「蓝鲸百科」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。