인프런 커뮤니티 질문&답변

머쉬맘님의 프로필 이미지
머쉬맘

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

1. 학급 회장(영상 후반 HashMap 추가설명)

HashMap에서 map.KeySet() 정렬관련 질문있습니다.

작성

·

202

0


입력 순서가 BACDE 이면 HashMap을 배열로 생각하였을 때, 순서대로 저장된다면 KeySet()의 배열은 [B, A, C, D, E]가 되는게 맞지 않나요? for(char x : keySet())의 출력 값이 ABCDE로 나오는 것을 보면 별다른 sort과정 없이 HashMap에서 Key 값을 정렬해서 출력해주는 것으로 보입니다.

HashMap에 존재하는 Key값들이 자동적으로 정렬이 되고 있다고 봐도 될까요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변드리겠습니다. HashMap은 입력 순서를 유지하지 않으며, 자동으로 키 값을 정렬하지도 않습니다. HashMap은 내부적으로 해시 테이블을 사용하여 키와 값의 쌍을 저장합니다. 그렇기 때문에 키의 순서는 해시 함수의 결과에 따라 결정되며, 입력 순서나 자연스러운 순서와는 무관하게 저장됩니다.

만약 키를 특정 순서대로 정렬하고 싶다면, TreeMap을 사용하거나, HashMap의 키를 별도로 정렬하는 추가 작업이 필요합니다. TreeMap은 자연 순서 또는 커스텀 순서대로 키를 정렬하여 저장하는 Map 구현체입니다.

따라서 HashMap에서 KeySet()의 출력 값이 ABCDE로 나왔다면, 이는 우연히 키의 해시 값이 이 순서대로 저장되었거나, 다른 곳에서 정렬된 키를 사용했을 가능성이 있습니다. 자동으로 정렬이 된다고 보기보다는, 필요한 경우 TreeMap 사용 또는 키를 정렬하는 로직을 추가하여 사용해야 합니다.

머쉬맘님의 프로필 이미지
머쉬맘

작성한 질문수

질문하기