2016-06-30 3 views
0

Date을 키로 사용하여 TreeMap을 작성하고 날짜순으로 정렬하면 remove(Date key) 또는 containsKey(Date key)과 같은 기능이 맵에 잘 표시 되어도 작동하지 않습니다. 또한 Date의 equals 함수는 잘 작동합니다.날짜가 키와 맵이 작동하지 않는 이유는 무엇입니까?

그래서 누구나 왜 작동하지 않는지 알고 있습니까?

Map<Date, Integer> hourMap = new TreeMap<Date, Integer>(new Comparator<Date>() { 
     @Override 
     public int compare(Date d1, Date d2) { 
      return d1.after(d2) ? 1 : -1; 
     } 
    }); 
    Date now = DateUtils.parseDate("04:00:00", "HH:mm:ss"); 
    hourMap.put(now, 12); 
    hourMap.remove(now); // doesn't work 
    boolean test = hourMap.containsKey(now); // return false 

답변

6

문제는 날짜가 아니라 당신의 고장 비교기 (예를 들어, 반환 -1 두 날짜가 동일한 경우) :

나는 기존의 자바 6u43을 사용하고 있는데 나는 그런 내지도를 만들 . 왜 기본값을 사용하지 않습니까?

Map<Date, Integer> hourMap = new TreeMap<Date, Integer>(); 

은 예상대로 작동해야합니다. 참고로

,이 비교기는 Date 클래스에서 구현하는 방법이다 (자바 8 - 확실하지가 자바 6 이후 변경된 경우) :

long thisTime = getMillisOf(this); 
long anotherTime = getMillisOf(anotherDate); 
return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));