2017-08-26 13 views
-1

ArrayListを並べ替える必要があり、並べ替えはArrayListのコピーで行う必要があります。JavaのArrayListから新しいセットを作成する方法

私は次のように試しましたが、元のリストをソートしています。ソートされたリストに変更を加えても元のリストにも反映されています。

List <Stud> list = new ArrayList<>(); 
list.add(new Stud(1,"Sachin") ); 
list.add(new Stud(2,"Niteen") ); 
Set <Stud> set = new HashSet<>(list); 
Stud s = set.iterator().next(); 
System.out.println("S:"+s); 
s.setRoll(10); 
System.out.println("list: "+list); 
System.out.println("set : "+set); 

ロール何ら10は、これを回避する方法、ArrayListのセットの両方に設定されていません。 なぜそれが起こっているのか説明すると役に立ちます。

+2

「スタッド」の同じインスタンスを両方のコレクションに追加しました。たぶんあなたは何かの上で 'setRoll'を呼び出すべきです(生徒の(?)身元情報から可変データを分離してください)。たぶんセットはID番号を持っているだけでしょうか?あなたのプロジェクトについてもっと知ることなく伝えるのは難しいです。 – Thilo

+0

ここをクリックしてください:https://stackoverflow.com/questions/715650/how-to-clone-arraylist-and-also-clone-its-contents – algrid

+0

タイトルはあなたの質問とは関係がありません –

答えて

0

コレクションでコピーコンストラクタを使用すると、新しいコレクションが作成され、古いコレクションのすべての要素が追加されます。必要なのは、要素をコピーし、その目的のためにforEach()を使用し、要素のコピーを作成することです。

0
List <Stud> list = new ArrayList<>(); 
    list.add(new Stud(1,"Sachin") ); 
    list.add(new Stud(2,"Niteen") ); 
    Set <Stud> set = new HashSet<>(); 
    //copy using forEach 
    for(Stud s : list){ 
     set.add(new Stud(s.getRoll(),s.getName())); 
    } 
    Stud s = set.iterator().next(); 
    System.out.println("S:"+s); 
    s.setRoll(10); 
    System.out.println("list: "+list); 
    System.out.println("set : "+set); 

私はあなたのプロジェクトについてはわかりませんが、これが唯一の方法だと思われます。 2つのオブジェクトを作成し、2つの異なるコレクションインスタンスで同じオブジェクトを使用しています。コレクションインスタンスが異なる場合でも、下線オブジェクトは同じです。したがって、そのプロパティの1つを変更すると、使用しているすべてのコレクションインスタンスに反映されます。だから、上記のように新しいスタッドオブジェクトを参照することによってそれらを複製する唯一の方法。

関連する問題