2014-05-23 4 views
-4

인터넷 예에서 HashMap을 연구하고 있는데 왜 put()이 정수 값을 바꾸지 않고 합산 한 것인지 이해할 수 없습니까? 나는 문자열을 사용하여 시도해 본 결과, 문자열을 대체해야합니다.hashmap이 정수 값을 합산하는 이유

의 Javadoc는 말한다 : 지정된 키를이 맵에

동료 지정된 값. 지도에 이전에 키 매핑이 포함 된 경우 이전 값이 대체됩니다. 그러나

는 :

public class testMap { 

    public static void main(String[] args) { 

     HashMap<Dog, Integer> myH = new HashMap<>(); 
     Dog d1 = new Dog("white"); 
     Dog d2 = new Dog("green"); 
     Dog d3 = new Dog("purple"); 
     Dog d4 = new Dog("white"); 
     Dog d5 = new Dog("green"); 
     Dog d6 = new Dog("white"); 
     Dog d7 = new Dog("white"); 

     myH.put(d1, 10); 
     myH.put(d2, 20); 
     myH.put(d3, 30); 
     myH.put(d4, 14); 
     myH.put(d5, 15); 
     myH.put(d6, 60); 
     myH.put(d7, 10); 

     System.out.println(myH.size()); 

     for (Entry<Dog,Integer> line : myH.entrySet()) { 
      System.out.println(line.getKey().toString()+" - "+line.getValue()); 
     } 
    } 

} 

class Dog { 
    String color; 

    Dog(String c){ 
     color = c; 
    } 
    @Override 
    public String toString() { 
     return color + " dog" ; 

    } 
    @Override 
    public boolean equals(Object o) { 
     return ((Dog) o).color == this.color; 

    } 
    @Override 
    public int hashCode() { 
     return color.length(); 
    } 

} 

나는 질문을 철회. javadoc이 말하는 것처럼 완벽하게 작동합니다. 결과에 충분한주의를 기울이지 않았습니다. 또한 게시물은 지워질 수 있으므로 그 어떤 중요한 정보도 묻지 않습니다.

+2

을 보여주는 것. 너는 무엇을 기대 하느냐? 너는 무엇을 얻었 느냐? – Burkhard

+0

해시 코드 구현이 잘못되었습니다. – Ved

+0

'put()'이 정수 값을 합산 한 이유는 무엇이라고 생각하십니까? – awksp

답변

1

문자열 동일성 검사에는 항상 equals()를 사용하십시오. Btw이 경우 ==은 정상입니다.

@Override 
public boolean equals(Object o) { 
    return ((Dog) o).color.equals(this.color); 

} 

는 Btw는 이것이 매우 명확하지 않다

3 
green dog - 15 
white dog - 10 
purple dog - 30 
+1

이 경우'=='를 사용하면 문자열 인 에이블 때문에 작동해야합니다. – awksp

+0

예. :) –

+0

고마워, 방금 결과를 간과. 너무 이른 아침. 동등한 감사합니다, 나는 이것을 또한주의했다. –

관련 문제