요소의 순서와 함께 HashMap을 사용하고 싶습니다. 그래서 TreeMap을 선택합니다. 코드가 내게 map.remove()
를 사용하여 요소를 추가하면 내가TreeMap - 키 기반의 동적 순서 지정 요소
public class MapTest {
public static class Key implements Comparable<Key>{
private String key;
private int count;
public Key(String key, int count){
this.key = key;
this.count = count;
}
@Override
public int hashCode() {
return key.hashCode();
}
@Override
public boolean equals(Object obj) {
return key.equals(obj);
}
@Override
public int compareTo(Key o) {
return count - o.count;
}
}
public static void main(String[] args) {
Map<Key, Integer> map = new TreeMap<>();
Key c = new Key("c", 4);
map.put(new Key("a", 6), 1);
map.put(new Key("b", 8), 1);
map.put(c, 1);
map.put(new Key("d", 2), 1);
for(Map.Entry<Key, Integer> entry : map.entrySet()){
System.out.println(entry.getKey().key);
}
//map.remove(c);
map.put(c, null);
c.count = 0;
map.put(c, 1);
for(Map.Entry<Key, Integer> entry : map.entrySet()){
System.out.println(entry.getKey().key);
}
}
}
을 기대했던 것보다 이상한 대답을 제공합니다 아래, 그것은 주문한다. 그렇지 않으면 항상 순서대로 요소를 반환합니다. dc a b
위의 코드가 작동하지 않는 이유는 무엇입니까? put (key, null)은 값을 삭제해야하며 새 값이 삽입되면 올바르게 정렬해야합니까?