不影响元素顺序的列表转集合

8
我有一个字符串列表,如["abc", "xyz", "abc", "mno", "123"]。现在我想从这个列表中获取唯一的值。为此,我将列表转换为HashSet。虽然我成功地实现了这个目标,但元素的顺序受到了影响。输出的结果是非常随机的,例如["123", "xyz", "abc", "mno"]。但我希望结果集包含与ArrayList相同顺序的项。我该怎么做呢?
List<String> parameters = new ArrayList<String>();
//add the parameter to List
Set<String> parameterSet=new HashSet<String>(parameters);

4
使用LinkedHashSet。 - reto
5个回答

13

使用 LinkedHashSet

List<String> parameters = new ArrayList<String>();

                                            Call the List here
                                                     |
Set<String> parameterSet=new LinkedHashSet<String>(parameters);

2

你必须使用LinkedHashSet,否则它不会工作,因为HashSet是无序的。


没错,我一开始也想到了 TreeSet,但是 OP 需要保持插入顺序。 - Adam Arold

2
你可以使用 LinkedHashSet
来自 JavaDocs:

Set 接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与 HashSet 不同之处在于,它维护了一个双向链接列表,该列表通过所有条目运行。这个链接列表定义了迭代顺序,即元素插入集合的顺序(插入顺序)。


2

1

使用LinkedHashSet。 来自Oracle doc:

LinkedHashSetSet接口的哈希表和链表实现,具有可预测的迭代顺序。这种实现与HashSet不同之处在于它维护一个双向链接列表,通过其所有条目。这个链接列表定义了迭代顺序,即元素插入集合的顺序(插入顺序)。请注意,如果将元素重新插入集合,则不会影响插入顺序。(如果在调用s.contains(e)返回true之前立即调用s.add(e),则元素e将被重新插入到集合s中。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接