如何替换LinkedHashSet中的特定元素?

时间:2013-12-13 10:03:57

标签: java linkedhashset

使用ArrayList,我会做类似

的事情
myList.set(myList.indexOf(oldItemNumber), newItemNumber);

有没有一种简单的方法来实现LinkedHashSet?

5 个答案:

答案 0 :(得分:2)

只需使用put()方法即可。它将更新该特定条目。

答案 1 :(得分:2)

来自LinkedHashMap的文档:

  

使用Hash表和Map接口的链表实现   可预测的迭代顺序。此实现与HashMap不同   因为它维护着一个贯穿所有链接的双向链表   条目。该链表定义了迭代排序,即   通常是键插入地图的顺序   (插入顺序)。请注意,如果键是插入顺序不受影响   被重新插入地图。 (如果将密钥k重新插入到地图m中   当m.containsKey(k)返回true时,调用m.put(k,v)   在调用之前。)

所以你可以简单地把()放入()新的值,它将保持它在订购中的当前位置。如果要将其添加到最后,请删除旧值,然后添加新值。

答案 2 :(得分:2)

这个问题对于一个集合来说毫无意义。添加到Set的新对象要么等于现有对象(在这种情况下没有任何反应),要么没有(在这种情况下,它会在末尾添加)。

如果不删除并重新添加所有内容,则无法在特定位置插入对象。

您可能需要查看TreeSet,它允许您保留一个有序集,在添加和删除对象时,所提供的比较器将保持有序集。

答案 3 :(得分:1)

使用map.put(key ,value)如果您将使用相同的密钥,它将替换之前的值

答案 4 :(得分:1)

我解决了此问题,其中LinkedHashSet成员对象具有一个哈希码,该哈希码仅在对象的一部分(例如其“名称”字段)上计算值。是的,这是非常规的,但我也有一个匹配的equals()方法。两个不同的对象可以具有相同的哈希码并看起来相等,但是在内部它们具有一些不同的值。

一个例子是数据库记录,它的键必须是唯一的。您需要用一组新值替换记录,以便找到并用具有新值的匹配键替换记录。

// Rebuild Linked Hash Set in original order with new element.
ArrayList<Item> newSet = new ArrayList<>(oldSet);
newSet.add(newSet.indexOf(oldItem), newItem);
oldSet.clear();
oldSet.addAll(newSet);

arrayList将以相同的顺序包含旧值,并且新项将添加到旧项之前。无需删除重复项。当添加到旧的HashSet(LinkedHashSet)时,它仅保留第一次出现的任何重复哈希码。