2016-06-26 4 views
1

HashMap 또는 TreeMap을 사용하여 학생 목록과 성적을 보유해야하는 과제를 받았습니다. 나는 그들이 열쇠라고 생각하고 값은 학생의 학년이 될 것입니다. 나는 같은 이름의 학생들을 허용하도록 지시 받았다.HashMap 또는 TreeMap에서 중복 키를 허용하는 방법은 무엇입니까?

중복 키를 허용하지 않는 HashMap 또는 TreeMap이 없으므로 이름을 키로 사용할 수 없습니까?

중복 키를 허용하는 간단한 방법이 있습니까? TreeMap은 중복 키를 어떻게 정렬합니까?

또한 이름순으로 정렬 할 수 있어야 TreeMap을 사용하는 것이 좋습니다.

답변

1

다른 데이터 구조를 찾는 것보다 이 고유 한 인 다른 키를 생각해보십시오. 이것은 소프트웨어 개발에서 매우 공통적 인 문제입니다. 현실 세계의 많은 개념들이 우리가 원하는만큼 독특하지 않기 때문입니다. 이름 (사람뿐만 아니라 장소 및 사물)은 고전적인 예입니다.

여러 가지 잠재적 인 해결책이 있지만 일반적인 것은 각 고유하지 않은 식별자를 고유 한 식별자로 할당하고 키로 사용하는 것입니다. 당신은 지금뿐만 아니라 사람의 ID를 조회 할 수 있어야하기 때문에

Map<Integer, Person> 

이것은 단지 당신이 그들의 이름을 알고 가정, 물론 문제를 오프로드 : 같은지도가 보일 수 있습니다.

Map<String, Set<Integer>> 

여기서 키는 이름이고 값은 해당 이름이있는 ID 세트입니다. 그런 다음 사용자에게 애플리케이션을 선택하도록 요청하는 등 필요한 경우 더욱 명확하게 구분할 수있는 애플리케이션 별 방법을 사용해야합니다. 이 두 번째 Map은 알파벳 순서로 이름이 필요하거나 PersonComparable으로 구현하도록 선택할 수있는 경우 TreeMap이 될 수 있습니다.

Guava 라이브러리는 Map<K, Set<V>>과 같은 데이터 구조를 사용하기가 훨씬 쉬운 Multimap 인터페이스를 제공합니다.