0

メソッドを使用してArrayList このように反転する非常に便利なCollections.reverse()方法があることを確認しましたが、少なくともカスタム オブジェクトのような、いくつかのタイプのプリミティブ オブジェクトに対してそのような反転操作を実行する必要がArrayListあります。ListしたがってCollections、単一のメソッドを拡張して使用するために私の命を救うことはできません。

これまでのところ、なんとか stg を機能させることができました (以下のコードを参照) が、2 回記述する必要があります。両方に同じ名前を付けたので、使い方は非常に便利ですが、いくつかの..最適化はさらに便利です:-)。

これらの 2 つのメソッドを単一の (実際の) 一般的なメソッドに共通化するにはどうすればよいですか?

どうも


/**
 * Generic Reverse Method for ARRAYLIST using Iterator
 * @param ArrayList<Obj_item> notReversed
 * @return ArrayList<Obj_item> reversed
 */
@SuppressWarnings("unchecked")
public static <Obj_item> ArrayList<Obj_item> GenReverseArrayByIterator(ArrayList<Obj_item> mylist) {
                       // ^^^^^^^^^^^^^^^^^^ how to make this generic ?
    // Instanciate
    ArrayList<Obj_item> tmp = new ArrayList<Obj_item>();
    ArrayList<Obj_item> reversed = new ArrayList<Obj_item>();

    // Copy original list
    tmp = mylist;

    // Generate an iterator, starting right after the last element.
    @SuppressWarnings("rawtypes")
    ListIterator myIterator = tmp.listIterator(tmp.size());

    // Iterate in reverse direction
    while (myIterator .hasPrevious()) {
        reversed.add((Obj_item) myIterator.previous());
    }
    return reversed;
}
4

3 に答える 3

8

Collections.reverseかかりますList<?>ArrayList実装List- そのメソッドを 1ArrayListつまたは任意のList実装で使用できます。私が質問を誤解していない限り、あなたがしていることはまったく不必要に思えます。

于 2012-09-12T23:18:00.017 に答える
4

Collections.reverse()のインスタンスを反転しますList。そうですCollections.reverse()ArrayList、または の任意のインスタンスで使用できますList

とにかく、必要に応じて手書きで書く方法は次のとおりです。

static void reverse(List<?> list) {
  for (int i = 0, l = list.size() / 2, j = list.size() - 1; i < l; i++, j--) {
    Object tmp = list.get(i);
    list.set(i, list.get(j));
    list.set(j, tmp);  
  }
}
于 2012-09-12T23:17:46.543 に答える