0

我有一种从数组中排序和删除重复项的方法:

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;
}

但是我的方法并没有删除重复的项目。怎么了?

4

3 回答 3

0

这是否完全编译(SortedList您尝试返回的内容甚至在上下文中都不存在)?无论如何,您可能应该首先创建一个字典(又名 map/hash)来删除重复项,然后对该字典的所有键进行排序。

于 2012-08-09T13:41:19.950 回答
0

我的建议是使用 Set。Set 不允许输入重复项,因此您不必担心删除它们。也许就像一个 SortedSet,所以排序和重复删除是自动的。ConcurrentSkipListSet、NavigableSet、TreeSet 也是 SortedSet 的。

于 2012-08-09T13:43:03.873 回答
0

你让自己变得更加困难。ArrayList 和 List 都实现了 Comparable 接口。允许您在其任何元素上调用 compareTo 方法。

listForSort.get(i).compareTo(sortedList.get(i));

使用带有迭代器的 List.hasNext() 考虑“脱落”列表的末尾。它将使您的数组操作更加高效。

于 2012-08-09T13:44:16.747 回答