防止重复但保留可逆重复插入顺序的集合?

时间:2014-04-02 17:06:34

标签: java data-structures collections guava

是否有保留可逆重复插入顺序的集合?

具体来说,如果我插入以下项目:

1
2
3
1

我希望能够迭代它们并按以下顺序接收它们:

1
3
2

也就是说,我希望它们按降序插入顺序重复插入导致重新排序。 Guava's LinkedListMultimap是我发现的最接近的,但它不支持下行遍历。

Java's LinkedHashSet不起作用,因为它不允许下行遍历。

我也可以使用LRU缓存,但我发现的大多数LRU库都不支持以LRU顺序检索对象。

这件事有标准名称吗?

2 个答案:

答案 0 :(得分:5)

如何使用LinkedHashSet并且每当您检测到该项目在那里时,您将其删除并重新插入?这是保证插入顺序的唯一方法是您期望的(或其反转)。

您可以LinkedListLinkedHashSet上创建{{1}}并以您喜欢的任何方式对其进行反转,例如iterate over the LinkedHashSet。使用Guava的Lists.reverse方法。

答案 1 :(得分:1)

尝试org.apache.commons.collections4.setlistOrderedSet.add(1,1); listOrderedSet.add(1,2); listOrderedSet.add(1,3); listOrderedSet.add(1,1);

例如:

{{1}}

这会给你预期的输出。