2013-07-16 4 views
0

내가 HashMap<String, Integer>이고 키가 단어이고 값이 코퍼스에서 빈도라고 가정 해 보겠습니다. 단어를 일부 정수 (예 : "hello"1)로 대체하고 대신 HashMap<Integer, Integer>을 만들려면 메모리가 절약됩니까? 일반적으로 정수는 문자열보다 공간을 덜 차지하지만 키가 해시 함수를 통과하기 때문에 HashMap의 키에 적용 할 수 있는지 여부는 알 수 없습니다. 미리 감사드립니다!정수가 java HashMap의 키와 같이 문자열에 비해 적은 공간을 차지합니까?

+0

자바에서 Intger의 해시 코드 값과 같으므로보다 효율적이라고 가정 할 것입니다. – gawi

답변

1

HashMap에 관한 한 StringInteger으로 바꿀 때 메모리 사용에 차이가 없습니다.

HashMap은 키와 값의 참조 값을 해당 KV 쌍에 저장하고 String 개체를 참조하는 대신 Integer 개체를 참조하기 때문입니다.

모든 용도와 목적으로 Integer 개체와 String 개체의 해시는 HashMap의 저장소 기능에 영향을주지 않습니다.

+0

이것은 'HashMap에 관한 한 모두'사실이지만 그의 질문이 아닙니다. – EJP

+0

사실 그것은 그의 질문 인 @EJP 인 것 같습니다. 당신의 대답은 부적절합니다. Java 오브젝트 (Integer와 String 모두)는 참조에 의해 전달되고 참조로 유지됩니다. – hd1

+2

나는 문장에서 벗어나려고했다. "일반적으로 정수는 문자열보다 공간을 덜 차지하지만 키가 해시 함수를 통과하기 때문에 HashMap의 키에 적용 할 수 있는지 여부를 알지 못합니다." 내 대답은 HashMap의 키가 참조 용이기 때문에 키 유형의 크기에 영향을받지 않는다는 것입니다. –

0

예, 물론입니다. Integer는 문자열이 비어 있어도 'int'가 'char []'에 대한 참조보다 작고 오프셋, 길이 및 해시 코드에 대해 'ints'가 더 많기 때문에 String보다 작습니다. Integer.valueOf()를 사용하면 캐싱도 있지만, 상수 풀을 통해 String 캐싱이 가능합니다.

그러나 수백만 개의 항목이 없으면 효과는 무시할 수 있으므로 프로그램에 맞는 모든 키를 사용해야합니다.

관련 문제