我有一种从数组中排序和删除重复项的方法:
public ArrayList<Integer> sortArray(ArrayList<Integer> listForSort) {
List<Integer> sortTemp = new ArrayList<Integer>();
ArrayList<Integer> Sortedlist = new ArrayList<Integer>();
int[] array = new int[20];
for (int i = 0; i < listForSort.size(); i++) {
array[i] = listForSort.get(i);
}
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
if (!(Arrays.asList(sortTemp).contains((Integer)array[i])) && (array[i] != 0)) {
Integer tempo = (Integer)array[i];
Sortedlist.add(tempo);
sortTemp.add(tempo);
}
}
return Sortedlist;
}
但我的方法不会删除重复的项目。有什么问题?
答案 0 :(得分:0)
这是否完全编译(你尝试返回的SortedList
甚至不存在于上下文中)?
无论如何,你应该首先创建一个字典(a.k.a. map / hash)来删除重复,然后对这个字典的所有键进行排序。
答案 1 :(得分:0)
我的建议是使用Set。 Set不允许输入副本,因此您不必担心删除它们。也许像SortedSet,因此排序和重复删除是自动的。 ConcurrentSkipListSet,NavigableSet,TreeSet也都是SortedSet的。
答案 2 :(得分:0)
你在自己身上做得更难了。 ArrayList和List都实现了Comparable接口。允许您对其任何元素调用compareTo方法。
listForSort.get(i).compareTo(sortedList.get(i));
考虑使用带迭代器的List.hasNext()将列表末尾“掉落”。它将使您的阵列操作更加有效。