2016-07-11 12 views
0

ArrayList(alal)とArrayList(al)のArrayListがあります。私はalalにalを挿入したいが、alal.get(0)にalが持つすべての要素に加えて100を加えたいと思う。これを行う最も簡単な方法は、最初に行うことだと思った。ArrayListの別のArrayListと比較される1つの追加要素を持つArrayListの作成

alal.add(al);

、その後は

alal.get(0).add(100)のように、それは0番目の要素のアクセス、及び100を追加します。

しかし、これに伴う問題は、それがオブジェクトののでalalそれが値基準とない保持するためのAlの内容も変更することです。

私は以下を試しました。これが正しい方法であるかどうか教えてください。改善を提案してください。

import java.util.ArrayList; 

public class additionalal { 
    public static void main(String[] args) { 
     ArrayList<ArrayList<Integer>> alal = new ArrayList<ArrayList<Integer>>(); 
     ArrayList<Integer> al = new ArrayList<Integer>(); 
     al.add(1);al.add(2);al.add(3); 

     //WRONG 
//  alal.add(al); 
//  alal.get(0).add(100); 

     //CORRECT 
     ArrayList<Integer> alextra = new ArrayList<Integer>(); 
     alextra.addAll(al); 
     alextra.add(100); 
     alal.add(alextra); 

     System.out.println(alal); 
     System.out.println(al); 
    } 
} 
+1

になりますか? –

+0

alal.get(0)がリストの内容を返すようにするには、要素0にal(実際にはコピー)を挿入する必要があります: 'alal.add(0、al)' –

答えて

2

ので、それをクローニングし、追加するときに新しいArrayListにあなたのリストをラップ:

alal.add(new ArrayList<>(al)); 
alal.get(0).add(100); 

注しかし、リストの要素がそれに複製されていないこと。これは、Integerのリストを持っている場合は問題ありませんが、動的プロパティを持つ型の要素を格納するときに予期しない動作が発生する可能性があります。たとえば、あなたがPerson秒のListListのSを格納したい考えてみます。

​​

さて、私はその後、私はpersonGroups、たとえば、中personsのコピーを入れ、Listpersonsに入れて、Personを作成:

Person user = new Person(); 
user.setName("saltandwater"); 

List<Person> persons = new ArrayList<>(); 
persons.add(user); 

List<List<Person>> personGroups = new ArrayList<>(); 
personGroups.add(new ArrayList<>(persons)); 

両方のリストを印刷する

persons: [Person[name=saltandwater]] 
personGroups: [[Person[name=saltandwater]]] 
のようなものになります

personsに新しいPersonを追加すると、personGroupsは変更されません。 userは(のみpersonsリストは、クローン化された)クローン化されていなかったので、しかし、user.nameの変化は、両方のリストに反映されます:問題は何

user.setName("Mr. Yetti"); 

persons: [Person[name=Mr. Yetti]] 
personGroups: [[Person[name=Mr. Yetti]]] 
+0

ありがとういいねしかし、リストの要素はそれでクローン化されていないことに注意してください。 私はalalのすべての要素、すなわち[[1、2、3、100]]を見る。 – saltandwater

+0

@saltandwater:答えを強化しました。これは特にあなたの状況には関係ありませんが、それでも心に留めておいてください。 – hoefling

関連する問題