2

リストの最後に移動したい最初の3つの要素を持つArrayListがあります。'set'を使用していますが、期待どおりに機能していません。

List<Integer> integers = new ArrayList<Integer>();

for(Integer i : integers) {
    int index = integers.indexOf(i);
    if(index==0 || index==1 || index==2) {
        integers.set(i, integers.size()-1);
    }
}
4

6 に答える 6

15
List<Integer> integers = new ArrayList<Integer>();

使用する:Collections.rotate(integers, -3);

参考: http ://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#rotate%28java.util.List,%20int%29

于 2013-02-21T18:41:29.013 に答える
3

適切な使用subList()addAll()方法

于 2013-02-21T18:35:22.683 に答える
0
for(int index=0;index<3;index++){
    integers.add(integers.get(0));
    integers.remove(0);
}

私はこれがそれをするべきだと思います。

于 2013-02-21T18:55:18.853 に答える
0

set メソッドは、少なくともJavadocで説明されているとおりに機能します。

integers.set(i, integers.size()-1);

リストの位置 i に値 integers.size()-1 を設定して、リストを変更します:)

Collections.rotate が最善の解決策だと思いますが、リストの最初の要素を最後に追加してから、最初の要素を削除して 3 回繰り返すこともできます。

for(int i = 0; i < 3; i++){
    integers.add(integers.get(0));
    integers.remove(0);
}
于 2013-02-21T19:21:00.943 に答える
-1

add() を使用してそれらを最後に配置し、古い要素を削除してみませんか? 例外は、リストが変更された後にイテレータが使用されたためです。答えは、反復子を使用して 3 つの項目を保存し、反復子の外でリストを変更することです。

List<Integer> integers = new ArrayList<Integer>();
Integer keep[] = new Integer[3];

for(Integer i : integers) {
    int index = integers.indexOf(i);
    if(index==0 || index==1 || index==2) {
        keep[i] = i;  // save the first three
    }
}

// add the first three to the end of the list
integers.add(keep[0]);
integers.add(keep[1]);
integers.add(keep[2]);


// remove the previous first three
integers.remove(0);
integers.remove(1);      
integers.remove(2);

integers.remove(0)0 番目の要素が再利用されるか空のままかによって、3 回実行する必要があるかどうか疑問に思っています。

于 2013-02-21T18:45:19.613 に答える
-1

最初の答えとして、フォームは次のようになります。

List<Integer> auxList = originalList.subList(0, 3);
for(int i =0; i < 3; i++) {originalList.remove(i);}
originalList.addAll(auxList);
于 2013-02-21T18:39:43.083 に答える