0

私はこの地図を持っています:

Map<City, TreeSet<Individual>> cityIndividualMap = new HashMap<City, TreeSet<Individual>>();

この関数を使用して、このマップにデータを入力します。

public void add(List<Individual> individuals){
    for (Individual individual : individuals){
        individualSortedSet.add(individual);

        for(City city:individual.getCities()){
            TreeSet<Individual> individualList;

            if (cityIndividualMap.containsKey(city))
                individualSet = cityIndividualMap.get(city);
            else
                individualSet = new TreeSet<Individual>( new FitnessComparator());

            individualSet.add(individual);
            cityIndividualMap.put(city, individualSet);
        }
    }
} 

これは私のコンパレータです:

public class FitnessComparator implements Comparator<Individual> {
    @Override
    public int compare(Individual individual1, Individual individual2) {
        if (individual1.getFitness() == individual2.getFitness())
            return 0;
        return (individual1.getFitness() > individual2.getFitness())? 1 : -1;
    }
}

個々のクラスは単なるデータ クラスなので、ここではコピーしません。

非常に奇妙な理由により、CityIndi​​vidualMaps 値は 1 つの要素しか取りません! これをデバッグモードで何度も実行しましたが、項目が 1 つしか追加できない理由がわかりません。確認していただけますか?

4

2 に答える 2

1

すべての都市の個別のリストを新しいリストで上書きし続けます。変化する:

TreeSet<Individual> individualList;

if (cityIndividualMap.containsKey(city))
    individualSet = cityIndividualMap.get(city);
else
    individualSet = new TreeSet<Individual>( new FitnessComparator());

individualSet.add(individual);
cityIndividualMap.put(city, individualSet);

に:

TreeSet<Individual> individualList = cityIndividualMap.get(city);

if (individualList == null)
{
    individualList = new TreeSet<Individual>( new FitnessComparator());
    cityIndividualMap.put(city, individualList);        
}
individualList.add(individual);
于 2013-11-14T12:18:41.487 に答える