有没有重复的列表实现?

2022-08-31 10:51:10

我知道 SortedSet,但在我的情况下,我需要一些实现的东西,而不是 。那么,在API中还是在其他地方是否有实现呢?ListSet

我自己实施应该不难,但我想为什么不先问问这里的人呢?


答案 1

标准库中没有 Java 集合可以执行此操作。LinkedHashSet<E>保留了与 类似于 a 的顺序,因此,当您想要将其用作 a 时,如果您将集合包装在 a 中,您将获得所需的语义。ListListList

或者,Commons Collections(或,对于通用版本)有一个已经可以做你想要的事情:SetUniqueList / SetUniqueList<E>commons-collections4List


答案 2

这是我所做的,它的工作原理。

假设我有一个工作,我做的第一件事就是创建了一个新的.ArrayListLinkedHashSet

LinkedHashSet<E> hashSet = new LinkedHashSet<E>()

然后,我尝试将新元素添加到 .add 方法不会更改 ,如果新元素重复,则返回 false。因此,这成为我可以在添加到 .LinkedHashSetLinkedHasSetArrayList

if (hashSet.add(E)) arrayList.add(E);

这是一种简单而优雅的方法,可防止重复项被添加到数组列表中。如果需要,可以将其封装在扩展 .只需记住通过循环遍历元素并调用add方法进行处理即可。ArrayListaddAll