列表设置而不影响元素的顺序

时间:2013-11-20 11:53:15

标签: java arraylist set

我有一个字符串列表["abc", "xyz", "abc", "mno", "123"]

现在我想要这个列表中的唯一值。为此,我将List转换为HashSet。

我能够实现相同但元素的顺序受到影响。输出非常随机,其中一个结果是["123", "xyz", "abc", "mno"]

但是我希望结果集包含与arraylist相同顺序的项目。我怎样才能做到这一点?

List<String> parameters = new ArrayList<String>();
//add the parameter to List
Set<String> parameterSet=new HashSet<String>(parameters);

5 个答案:

答案 0 :(得分:8)

使用LinkedHashSet

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

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

答案 1 :(得分:2)

您必须使用LinkedHashSet。否则它将无效,因为未订购HashSet

答案 2 :(得分:2)

您可以使用LinkedHashSet

来自JavaDocs:

  

Set的哈希表和链表实现   接口,具有可预测的迭代顺序。这个实现   与HashSet的不同之处在于它保持了双重链接   列表遍历其所有条目。此链接列表定义   迭代排序,即元素的顺序   插入集合(插入顺序)。

答案 3 :(得分:2)

您可以使用LinkedHashSet这是一个维护广告订单的集合

答案 4 :(得分:1)

使用LinkedHashSet。 来自Oracle doc

  

使用Set接口的哈希表和链表实现   可预测的迭代顺序。此实现与HashSet不同   因为它维护着一个贯穿所有链接的双向链表   条目。该链表定义了迭代排序,即   将元素插入集合(插入顺序)的顺序。   请注意,如果重新插入元素,则不会影响插入顺序   进入集合。 (如果s.add(e)是,则将元素e重新插入到集合中   当s.contains(e)在紧接之前返回true时调用   调用。)