从ArrayList转换为Array android时,值会互换

时间:2014-07-16 07:27:20

标签: java android arrays arraylist

我有一个ArrayList,它有一些元素。重复此列表中的项目。我想将类似的值分组并将其转换为数组。

目前我的ArrayList是: -

ArrayList<String> isonC = new ArrayList<String>();

isonC =`[a,a,a,a,b,c,c,C,c,c,c,d,d,d,d,d,d,d]的值 我把它分组: -

icons = isonC.toArray(new String[isonC.size()]);
icons = new HashSet<String>(Arrays.asList(icons)).toArray(new String[0]);

我得到的值为: - icons = [a, c, b,d]

而元素的实际顺序应为: -

[a,b, c,d]

为什么第二和第三个值互换了?

任何建议都会有所帮助。 感谢

2 个答案:

答案 0 :(得分:5)

尝试使用TreeSet代替HashSet。尝试以下内容: -

TreeSet<String> mySet =  new TreeSet <String>(myArrayList);
myArray =  mySet.toArray(new String[mySet.size()]);

答案 1 :(得分:1)

来自LinkedHashSet的{​​{3}}:

  

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

因此,以下内容应该有效,假设您希望oldArray中较早出现的项目出现在newArray的前面:

String[] newArray = new LinkedHashSet<String>(Arrays.asList(oldArray)).toArray(new String[0]);