У меня есть этот код. Он должен упорядочить карту по целочисленному значению.
public class Main {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<>();
ValueComparator bvc = new ValueComparator(map);
TreeMap<String,Integer> sorted_map = new TreeMap<>(bvc);
map.put("A",5);
map.put("B",4);
map.put("C",4);
map.put("D",2);
System.out.println("unsorted map: "+map);
sorted_map.putAll(map);
System.out.println("results: "+sorted_map);
}
}
class ValueComparator implements Comparator<String> {
Map<String, Integer> base;
public ValueComparator(Map<String, Integer> base) {
this.base = base;
System.out.println("Map: " + base);
}
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
}
}
}
И это работает нормально. Но сначала в качестве параметра для экземпляра ValueComparator я передаю конструктору пустую хэш-карту. И эта пустая карта сохраняется в базе. Затем я создаю древовидную карту с помощью компаратора. Затем я помещаю материал на карту, и он автоматически обновляет ссылку в ValueComparator с именем base. Почему карта, переданная в ValueComparator, обновляется автоматически? На самом деле переменная base должна быть пустой картой. Не так ли?