为什么Java LinkedHashMaps没有insert()方法?

时间:2010-12-06 09:43:12

标签: java

截至insert(),我的意思是insertBefore(key)insertAfter(key)

据我所知,只能通过创建新地图并以正确顺序复制现有密钥和新密钥来实现在地图中间插入密钥。

考虑到LinkedHashMaps基于双链表,实现insertBefore(key)insertAfter(key)将是微不足道的。

我在这里错过了什么吗?

更新 感谢所有指出上述方法的人违反了维持订单的合同。

所以让我重新解释一下这个问题:有没有人知道一个让我这样做的课程?

我查看了SortedMap(及其衍生物,包括NavigableMap),但我不希望明确地对地图进行排序。想想浏览器DOM中的nodeList。我只需要能够以任意顺序插入元素(在本例中为KV对)。

由于

4 个答案:

答案 0 :(得分:4)

如果您想要有序地图,则可以使用NavigableMap

答案 1 :(得分:3)

因为Map没有insert()insertFirst()insertAfter()方法。话虽如此,做起来并不是一件容易的事。可能是一个不属于这个层次结构的类可以做到这一点。

答案 2 :(得分:3)

LinkedHashMap维护访问顺序插入顺序。我认为定义insertBefore(key)insertAfter(key)是没有意义的。

答案 3 :(得分:3)

由于:

  

此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。

因此,只有在插入元素的位置没有自由度时,才能维持该类合同的这一部分。在(y)现有元素之前插入显然违反了合同的这一部分,因此这种insert方法没有任何意义。

(唯一合法的版本是insertAfter(key),其中key始终是地图中的最后一个条目。而且,这正是put(key)已经完成的内容。)< / p>