我知道 SortedSet
,但在我的情况下,我需要一些实现 List
的东西,而不是 Set
。那么在 API 或其他地方是否有实现?
自己实施应该不难,但我想为什么不先问问这里的人呢?
原文由 Yuval 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道 SortedSet
,但在我的情况下,我需要一些实现 List
的东西,而不是 Set
。那么在 API 或其他地方是否有实现?
自己实施应该不难,但我想为什么不先问问这里的人呢?
原文由 Yuval 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是我所做的并且有效。
假设我有一个 ArrayList
来处理我做的第一件事是创建一个新的 LinkedHashSet
。
LinkedHashSet<E> hashSet = new LinkedHashSet<E>()
然后我尝试将我的新元素添加到 LinkedHashSet
。 add 方法不会改变 LinkedHasSet
并且如果新元素是重复的则返回 false。所以这成为我可以在添加到 ArrayList
之前测试的条件。
if (hashSet.add(E)) arrayList.add(E);
这是一种防止将重复项添加到数组列表的简单而优雅的方法。如果需要,您可以将它封装在扩展 ArrayList
的类中并覆盖 add 方法。只需记住通过遍历元素并调用 add 方法来处理 addAll
。
原文由 user3570018 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
标准库中没有 Java 集合来执行此操作。
LinkedHashSet<E>
preserves ordering similarly to aList
, though, so if you wrap your set in aList
when you want to use it as aList
你会得到你想要的语义。Alternatively, the Commons Collections (or
commons-collections4
, for the generic version) has aList
which does what you want already:SetUniqueList
/SetUniqueList<E>
。