값에 따라 TreeMaps를 정렬하는 방법을 이전에 검색했지만이를 수행하는 함수를 찾을 수 있었지만 이제는 remove() 메서드에 문제가있는 것처럼 보였습니다. 키를 사용하여 제거하지만 작동하지 않는 방법, 그리고 정렬 기능을 완전히 이해하지 못했다는 사실을 말하면 누군가가 문제를 설명 할 수 있습니까?정렬 된지도 제거 허용되지 않음
강령 :
public static void main(String[] args) {
TreeMap<String,Integer> theTree = new TreeMap<String,Integer>();
theTree.put("A", 5);
theTree.put("B", 3);
theTree.put("F", 1);
theTree.put("D", 5);
theTree.put("E", 6);
theTree.put("C", 7);
System.out.println(theTree.toString());
Map<String,Integer> sortedTree = new TreeMap<String,Integer>();
sortedTree = sortByValues(theTree);
System.out.println(sortedTree.toString());
for (Map.Entry<String, Integer> entry : sortedTree.entrySet())
{
if(entry.getKey().equals("A"))
sortedTree.remove(entry.getKey());
}
System.out.println(sortedTree.toString());
theTree = new TreeMap<String,Integer>(sortedTree);
theTree.remove("B");
System.out.println(theTree.toString());
}
public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}
아웃풋 :
{A=5, B=3, C=7, D=5, E=6, F=1}
{C=7, E=6, A=5, D=5, B=3, F=1}
{C=7, E=6, A=5, D=5, B=3, F=1}
{A=5, C=7, D=5, E=6, F=1}
는 A가
당신의 비교기에서
그게 뭐죠? http://ideone.com/hSS5OS –
@ZouZou Comparator에 대한 설명이 왜 제거에 실패했는지 대답합니다. – bjhaid
@bjhaid 예.하지만 초기 문제는 아니 었습니다. 그의 설명에서지도 순회가 빠져 있었다. –