为什么不';Java LinkedHashMaps是否有insert()方法?
通过为什么不';Java LinkedHashMaps是否有insert()方法?,java,Java,通过insert(),我的意思是insertBefore(key)或insertAfter(key) 正如我所能指出的,在地图中间插入一个密钥只能通过创建一个新的地图并以正确的顺序复制现有的密钥和新的密钥来实现。 考虑到LinkedHashMaps基于双链表,实现insertBefore(key)或insertAfter(key)是很简单的 我是不是遗漏了什么 更新 感谢所有指出上述方法将打破维护插入顺序的合同的人 所以让我重新表述这个问题:有人知道有一个类可以让我这么做吗 我查看了Sorted
insert()
,我的意思是insertBefore(key)
或insertAfter(key)
正如我所能指出的,在地图中间插入一个密钥只能通过创建一个新的地图并以正确的顺序复制现有的密钥和新的密钥来实现。
考虑到LinkedHashMaps基于双链表,实现insertBefore(key)
或insertAfter(key)
是很简单的
我是不是遗漏了什么
更新
感谢所有指出上述方法将打破维护插入顺序的合同的人
所以让我重新表述这个问题:有人知道有一个类可以让我这么做吗
我查看了SortedMap
(及其衍生产品,包括NavigableMap
),但我不希望对地图进行明确排序。想象一下浏览器DOM中的节点列表。我只需要能够以任意顺序插入元素(在本例中为KV对)
谢谢,因为Map
没有insert()
或insertFirst()
或insertAfter()方法。话虽如此,这不是一件小事。可能是不属于此层次结构的类。LinkedHashMap可以执行此操作。LinkedHashMap维护访问顺序或插入顺序。我认为定义insertBefore(key)
或insertAfter(key)
是没有意义的。如果你想要一个有序的映射,你应该使用NavigableMap,因为:
此链表定义了迭代顺序,通常是将关键帧插入贴图的顺序(插入顺序)
因此,只有在元素插入位置的自由度为零的情况下,才能维护类契约的这一部分。在(y)个现有元素之前插入显然违反了合同的这一部分,因此这种insert
方法没有任何意义
(唯一合法的版本是insertAfter(key)
,其中key
始终是地图中的最后一个条目。瞧,这正是put(key)
所做的。)这是因为一般地图没有顺序,所以这些方法没有意义。@David:这就是为什么我说,不属于此层次结构的类可以很容易地做到这一点。顺便说一句,如果他们有番石榴,我也在寻找类似的东西。但他们似乎没有。免责声明,我从未广泛使用过番石榴。它维护插入顺序,所以我明白你的意思。如果你有这样的需要,继续,实现它,并为你自己的利益使用它。@Boris-我确实有这样的需要,如果找不到实现,我会的。在这种情况下,最简单的方法就是维护一个地图和一个列表。地图具有查找功能,列表具有所需的顺序。同时需要两个集合的特性是很常见的,这通常是通过包装两个集合来实现的。(或仅按原样使用两个)