2012-09-01 3 views
5

가능한 중복 : 내 프로젝트에서
How to sort a Map<Key, Value> on the values in Java?java HashMap 정렬 <String, Integer>. 그것을 정렬하는 방법?

, 나는이

HashMap의 정도 = 새의 HashMap 같은 해시 MAP 촬영 한();

한다고 가정 내가 가진 :

:

degree.put("a",5); 
degree.put("b",2); 
degree.put("c",4); 
degree.put("d",2); 
degree.put("e",3); 
degree.put("f",5); 

가 지금은 주어진 정수에 따라이 목록을 정렬 할 필요는

결과 순위의 HashMap이 될해야 값 {a = 5, f = 5, c = 4, e = 4, b = 4, d = 2}

어떻게 할 수 있습니까?

+0

정수 값에 따라 정렬 된 원래 HashMap은 실제로 {a = 5, f = 5, c = 4, e = 3, b = 2, d = 2}와 같은 것으로 보입니다. –

+0

이것을 확인하십시오 http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – SiB

답변

11

이며, 순서는입니다. 정렬 순서가 없습니다. TreeMap조차 값순이 아닌 키순으로 정렬됩니다. 이 값의 정렬 순서로 정렬 된 목록을 준비하려면

, 당신은 당신의 HashMap 반복하고 모든 항목을 삽입, 같은 ArrayList<Map.Entry<String,Integer>> 같은 적절한 객체를 생성해야하고, 다음으로 Collections.sort 전화 할게 조합 함수.

4

정렬 된지도를 원하면 HashMap이 최선의 방법이 아닙니다.

TreeMap을 정렬하여 살펴 보시기 바랍니다. 그들이이 대답처럼 당신은 대신 키의 값을 비교하는 비교기를 설정할 수 있습니다

https://stackoverflow.com/a/1283722/975959

+0

TreeMap에서 .get()을 호출하는 것이 더 좋지 않을 것입니다. 그것이 가치를보고 있다면. – bmargulies

0

당신은 (원본에서 새 해시 맵을 구축 insertion sort을 할 수는 2 배의 메모리를 소요하고 매우 비효율적이다). 따라서 hashmap의 .get() 및 .set() 메서드를 n * n (최악의 경우) 시간 (여기서 n은 요소의 수) 근처에서 사용해야합니다.

1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>(); 

for("your Object" m : degree.values()) 
{ 
     sortedHashMap.add(m); 
} 

collections.sort(sortedHashMap); 

그래서 hashMap을 정렬 된 hashMap으로 인쇄 할 수 있습니다!

관련 문제