-1
문자열 키와 int 값의 맵이 있습니다. 값을 변경할 때 정렬하고 정렬합니다. 비교기에서 사용할 수 있도록 정렬 된 쌍 및 정렬되지 않은 paris에 대한 일반지도에 트리 맵을 사용했지만 한 값이 다른 값을 전달한 후에 널 expection을 얻었습니다.요소를 변경할 때 값순으로 정렬되는 treeMap을 계속 정렬 할 수 있습니까?
public static TreeMap<String, Long> countryData;
public static ValueComparator bvc;
public static void setCountryData(HashMap<String, Long> map){
bvc = new ValueComparator(map);
countryData = new TreeMap<String, Long>(bvc);
countryData.putAll(map);
System.out.println(Arrays.toString(countyNames));
System.out.println(countryData.values());
}
public static class ValueComparator implements Comparator<String> {
Map<String, Long> base;
public ValueComparator(Map<String, Long> base) {
this.base = base;
}
public int compare(String a, String b) {
if(base.get(a).equals(base.get(b))){
return 0;
}
if (base.get(a) > base.get(b)) {
return -1;
} else {
return 1;
}
}
}
나는이 작업을 수행 할 수있는 방법, 내가 널을 얻을, 하나 개의 값 이후
General.bvc.base.put(country, newValue);
General.countryData.put(country, newValue);
가 서로를 통과하고 나는 그것을 액세서하려고 :
이 내가 값을 변경하는 방법입니다?
하지만 값 사이를 비교하기 위해 사용자 지정 비교기를 사용했습니다. 잘못된 방법 일 경우 올바른 방법은 무엇입니까? – Yovboy
사용자 지정 비교기가 키에 대한 정렬을 반환하지 않으면 'TreeMap'이 작동하지 않을 수 있습니다. 그것은 계약 위반입니다. 또한, 키로 사용되는 것을 업데이트하는 것은 계약 위반입니다. 당신은 이것을 할 수 없습니다. – EJP
동의 함. 실제로 작동하는 값으로 정렬 된 맵 구현을 작성하는 방법은 없습니다. 노멀 맵을 유지 한 다음 반복 할 때마다 값으로 정렬 할 수 있지만 얻을 수있는만큼 좋은 결과를 얻을 수 있습니다. –