1

なぜ私が電話するとき

ArrayList<String> reversedList = ListUtils.reverse(list);

メソッド内でコピーを作成しているにもかかわらず、元のリストを変更しています

package com.javablackbelt.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class ListUtils {

    public static void main(String arg[]) {
        String[] arr = {"one", "two", "three", "four", "five"};
        ArrayUtils.print(arr);

        System.out.println();

        String [] reversedArr = ArrayUtils.reverse(arr);
        ArrayUtils.print(reversedArr);

        System.out.println();

        ArrayList<String> list = ArrayUtils.toArrayList(arr);
        ListUtils.print(list);  

        ArrayList<String> reversedList = ListUtils.reverse(list);
        ListUtils.print(reversedList);

        String[] arrFromList = ListUtils.toArray(list);
        ArrayUtils.print(arrFromList);

    }

    public static void print(ArrayList<String> aStr) {
        System.out.print("list: [ ");
        for(String l: aStr)
            System.out.print(l+" ");
        System.out.println(" ] size: "+aStr.size());
    }

    public static ArrayList<String> reverse(ArrayList<String> aList) {
        ArrayList<String> newList = aList;

        Collections.reverse(newList);
        return newList;
    }

    public static String[] toArray(ArrayList<String> list) {
        ArrayList<String> newList = list;
        String[] newStr = newList.toArray(new String[list.size()]);

        return newStr;
    }

}
4

2 に答える 2

3

ArrayList<String> newList = aList;新しいリストを作成していません。同じリストへの新しい参照を作成します。

新しいリストの作成は、次のように行うことができます。

ArrayList<String> newList = new ArrayList<String>(aList.size());
for (String str : aList)
    newList.add(str);

Thx @JB Nizetこれははるかに簡単です:

ArrayList<String> newList = new ArrayList<String>(aList);
于 2012-10-30T22:46:12.290 に答える
0

ArrayList<String> newList = aList;あなたが新しいリストを作成しているのではなく、newListを指していると言うときaList。既存のリストを変更したくない場合 は、新しいArrayListを作成し、それに追加しaListます。newList

public static ArrayList<String> reverse(ArrayList<String> aList) {
            ArrayList<String> newList= new ArrayList<>();
                     newList.addAll( aList);

            Collections.reverse(newList);
            return newList;
        }

編集:

use Collections.copy(List dest, List src) to copy.

コレクションAPIについてはこちらを確認してください

于 2012-10-30T22:48:18.823 に答える