1

コードのこの部分があるとします。そして、私は出力を持っています。allValues: [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], []]. listOfValues2をclear()にすると。allValuesリストの値に影響を与えずに、そのリストだけをクリアしたいのです。どうすれば作れますか?これが必要なのは、後で別のデータ セットを使用して別のlistOfValues2を生成し、3 番目のリストとしてallValuesに入れるためです。

     LinkedList<Integer> listOfValues1 = new LinkedList<Integer>();
     LinkedList<Integer> listOfValues2 = new LinkedList<Integer>();
     LinkedList<LinkedList<Integer>> allValues= 
     new LinkedList<LinkedList<Integer>>();

     for(int w=0; w<=10; w++) {
        listOfValues1.add(w);
     }

     for(int b=5; b<=15; b++) {
        listOfValues2.add(b);
     }

     allValues.add(listOfValues1);
     allValues.add(listOfValues2);
     listOfValues2.clear();
     System.out.println("allValues: " + allValues);
4

7 に答える 7

1

のクローンのみをに追加するには、単にclone()your のメソッドを使用する必要があります。LinkedListlistOfValues2AllValues

public class Main {

    public static void main(String[] args) {

        LinkedList<Integer> listOfValues1 = new LinkedList<Integer>();
        LinkedList<Integer> listOfValues2 = new LinkedList<Integer>();
        LinkedList<LinkedList<Integer>> AllValues = new LinkedList<LinkedList<Integer>>();

        for (int w = 0; w <= 10; w++) {
            listOfValues1.add(w);  
        }

        for (int b = 5; b <= 15; b++) {
            listOfValues2.add(b);  
        }

        AllValues.add(listOfValues1);

        // adding a cloned Linkedlist        
        AllValues.add((LinkedList<Integer> ) listOfValues2.clone());
        System.out.println("AllValues: " + AllValues);
        listOfValues2.clear();
        System.out.println("AllValues: " + AllValues);  
    }
}

ここでのポイントは、リストのクローンを作成するAllValuesと、listOfValues2. そのため、リストへの更新は にlistOfValues2表示されませんAllValues

于 2013-11-05T08:05:17.690 に答える
0

リンクリストは常に値ではなくメモリを参照すると思います。list2 をクリアすると、その特定のメモリには値がありません。ここでも allValue リストは同じメモリ位置を参照しており、存在する値はありません。そのため、list2 では空で出力されます。

于 2013-11-05T08:13:57.633 に答える