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

あなたはこれを自分自身でより困難にしています。ArrayList と List はどちらも Comparable インターフェイスを実装しています。いずれかの要素で compareTo メソッドを呼び出すことができます。

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

List.hasNext() と Iterators を使用して、リストの最後を "落ちる" ことを考慮してください。これにより、配列操作がはるかに効率的になります。

于 2012-08-09T13:44:16.747 に答える
0

これはまったくコンパイルされますか (SortedList返そうとするものはコンテキスト内に存在しません)? とにかく、最初に繰り返しを削除するための辞書 (別名マップ/ハッシュ) を作成してから、この辞書のすべてのキーを並べ替える必要があります。

于 2012-08-09T13:41:19.950 に答える
0

私の提案は、セットを使用することです。セットでは重複を入力できないため、削除について心配する必要はありません。おそらく SortedSet のように、並べ替えと重複の削除が自動的に行われます。ConcurrentSkipListSet、NavigableSet、TreeSet もすべて SortedSet です。

于 2012-08-09T13:43:03.873 に答える