2016-10-10 15 views
-1

リストをプロットすると、オブジェクトは異なりますが、HashMap値だけがリストに最後に挿入された値と同じになります。リストに挿入された最後のオブジェクトに変更されたHashMap値

作成中(ループ)、私はHashMap値をプロットしようとしましたが、それは異なっています。私はグラフを生成し、いくつかの計算をするためにそれを使用します。ただし、リストに追加すると、すべての値が同じになります。または、新しいオブジェクトを作成するたびに、リスト内のすべてのオブジェクトのHashMap値が変更されます。ここで

私のコードです:人口のコンストラクタで

Population pop = new Population(jobs, machines, genesPlate, populationSize); 

:Main.javaでhttps://github.com/Willtl/2/tree/master/GAScheduling/src/main/java/uni/lu

、私は新しい人口を作成しています個々のIインサイド

for (int i = 0; i < popsize; i++) { 
    individuals.add(new Individual(i+1, jobs, machines, genesPlate)); 
} 

HashMap genesPlateの各ArrayListをシャッフルしています。

this.id = id; 
this.genesPlate = plate; 
this.jobs = jobs; 
this.machines = machines; 

ArrayList<Job> l1 = null; 
// shuffle list of jobs of each machine 
for (int i = 0; i < machines.length; i++) { 
    l1 = genesPlate.get(machines[i].getId()); 

    long seed = System.nanoTime(); 
    Collections.shuffle(l1, new Random(seed)); 
    genesPlate.put(machines[i].getId(), l1); 
} 

System.out.println("Reshuffled: " + genesPlate); 

computeFitness(); 

ここまでは問題ありません。私はプロットしているし、実際にそれはシャッフルされています。私は、ジョブとこの遺伝子プレート(ランダムな機械シーケンス)を使ってグラフを生成し、個々人の適応度を計算します。

しかし、私はこのコードにコメントしようとしましたが、何も起こらなかった(probは同じままです)。だから私はこのコードは大丈夫だと思います。

私はその中で数日間立ち往生しています。私はすべてを試みた。私は誰かが私を助けることを願っている

答えて

1

Javaには基本変数と参照変数のみがあります。

リストへの参照をマップに追加すると、それが参照するリストではなく、そのリストへの参照のみがコピーされます。 Listを1つしか作成せず、Mapへの参照を追加すると、Listオブジェクトは1つしか存在しません。

これを確認するには、デバッガでコードをステップ実行して、マップの値がすべて同じリストを指している可能性が高いことを確認します。

+0

どうすればよいですか?私は母集団を再現するために必要な異なる部分グラフと接続を表すので、独自のHashMapでリスト内の各オブジェクトを必要とします。ご回答有難うございます。 – WillEnsaba

+0

@ウィリアン別のマップまたはリストコレクションを作成するたびに、「新しい」コレクションを作成します。 –

+0

私はデバッガを使用していますが、別の質問があります。なぜすべての個人が同じHashMap (id = 42)を使用しているのですか? – WillEnsaba

関連する問題