2014-04-29 2 views
0

최근에 HashMap을 테스트 해본 결과 재미있는 문제가 발생했습니다. 나는 임의의 값을 설정 한 배열 인 a3을 가지고있다. 그런 다음이 배열을 가져 와서 HashMap 인스턴스 맵에 넣습니다.HashMap 사용하기 put()

내 문제는 개체 인스턴스에 put ("a3", a3) 값을 할당 할 때 인스턴스의 주소를 인쇄 할 수없는 것입니다. 예를 들어

:

HashMap<Object, Object> map = new HashMap<Object, Object>(); 
int[] a3 = new int[] {1, 2, 3, 4}; 

map.put("a3", a3); 

나는 호출하면에서 System.out.println (map.put ("A3", A3), I는 주소를 메모리에

그러나, 제공하고 있습니다. 나는 개체 인스턴스를 만든 다음 내가 널 얻을 해당 인스턴스에서 인쇄 해 봅니다. 위의 세그먼트를 실행

Object copy = map.put("a3", a3); 
System.out.println(copy); 

나에게 null 값을 제공합니다.

동일하게 보이는 두 문장이 다른 결과를주는 이유는 무엇입니까?

답변

0

HashMap에 대한 API 문서를 읽으십시오. 삽입중인 내용과 일치하는 값이지도에없는 경우 Null이 반환됩니다.

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put%28K,%20V%29

그래서 경우 "A3"당신이 수익을 얻을 것, 이미 맵에 존재하지만 그 다음하지 않기 때문에 당신은 다시 널 얻을. "a3"이 맵에 삽입되었지만 맵을 인쇄하지 않으면 put()에서 리턴을 인쇄했습니다.

+0

값이 HashMap에 없지만 HashMap에 값이없는 이유가 무엇인지 이해합니다. put() 메서드는 HashMap 내부에 값을 배치하지 않습니까? Object 인스턴스가 HashMap에 들어간 값에 할당되면 System.out.println()이 HashMap에있는 주소를 출력하지 않아야합니까? – Delfino

+0

그게 내가 말하는거야. 해시 맵에는 값이 있지만 put()은 해시 맵을 반환하지 않습니다. 'System.out.println (copy)'를하지 말고,'System.out.println (map.get ("a3"))'을 실행하면 거기에 나타납니다. – JamesENL

+0

제 설명은 의미가 있습니까? – JamesENL

0

@James_Massey 말하는 것처럼 당신은 공식 문서를 참조하는 경우, 당신은 put() 메소드의 반환 값이 있음을 볼 수 있습니다

키의 매핑이없는 경우 키에 관련 지을 수 있었던 이전의 값 . (널 반환은지도 이 이전에 키와 null을 연관 시켰음을 나타낼 수 있습니다.)