키를 기반으로 해시 맵 정렬


79

Java에 다음 해시 맵이 있습니다.

{B046 = 0.0, A061 = 3.0, A071 = 0.0, B085 = 0.0, B075 = 3.0, B076 = 9.0, B086 = 3.0, B095 = 0.0, B096 = 0.0, A052 = 0.0, B066 = 0.0, B056 = 9.0, B065 = 0.0, B055 = 9.0}

알파벳과 숫자가 고려되도록 해시 맵을 정렬하려면 어떻게해야합니까?

결과 해시 맵은 다음과 같아야합니다.

{A052 = 0.0, A061 = 3.0, A071 = 0.0, B046 = 0.0, B055 = 9.0, B056 = 9.0, B065 = 0.0, B066 = 0.0, B075 = 3.0, B076 = 9.0, B085 = 0.0, B086 = 3.0, B095 = 0.0, B096 = 0.0}

도움을 주셔서 감사합니다!


3
hashmap은 조회 용입니다. 사물을 해시합니다. 질서를 유지하지 않습니다.
Muhammad Hasan Khan

2
@HasanKhan .. 누가 물어 보셨나요?
eRaisedToX

답변:


239

정렬 사용 TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);

키별로 정렬 된 항목을 자동으로 넣습니다. 나는 String당신의 경우에 자연스러운 주문이 괜찮을 것이라고 생각 합니다.

참고 HashMap순서를 유지하지 않는 최적화를 조회 할 예정입니다.


안녕하세요 @Tomasz Nurkiewicz 역 순서를 받으려면 어떻게해야합니까?
Raghavendra

나만의 비교기를 적용 할 수 있습니까
Fakher

훌륭한 솔루션! 2 자리 숫자가있는 하나의 prob이 있으며 정렬은 1, 10, 11,12,2,3,4,5가됩니다. 이것에 대한 해결책이 있습니까?
Rachita Nanda

@RachitaNanda, 문자열보다 정수로 숫자를 저장해 볼 수 있습니다.
Krishna

27

사용자 지정 비교기와 함께 TreeMap을 사용합니다.

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

새 요소를 추가하면 자동으로 정렬됩니다.

귀하의 경우에는 문자열 순서가 충분할 수 있으므로 비교기를 구현할 필요조차 없습니다. 그러나 소문자 알파가 대문자 앞에 나타나는 것과 같은 특수한 경우를 구현하거나 숫자를 특정 방식으로 처리하려면 비교기를 사용하십시오.


11

TreeMap이러한 종류의 정렬 (자연)에 대한 최선의 방법입니다. TreeMap자연스럽게 키에 따라 정렬됩니다.

HashMap삽입 순서를 유지하지 않으며지도를 정렬하지도 않습니다. LinkedHashMap게재 순서를 유지하지만지도를 자동으로 정렬하지 않습니다. 전용 TreeMapMap인터페이스 천연 순서에 따른 맵을 정렬 (제 1 부호, 대문자 알파벳 초, 소문자 알파벳 마지막).


5

TreeMap을 사용하십시오. 맵이 "그렇게 보이는"것은 약간 모호합니다. 기준에 따라 키를 정렬하고 맵을 반복하여 각 객체를 검색 할 수도 있습니다.


3

그냥를 사용 TreeMap. SortedMap인터페이스를 구현 하므로 포함 된 키를 자동으로 정렬합니다. 원하는 결과를 얻기 위해 키를 알파벳순으로 정렬 할 수 있으므로 비교기를 제공 할 필요조차 없습니다.

HashMap은 정렬되지 않습니다. HashMap으로 할 수있는 유일한 일은 모든 키를 가져 와서 정렬 된 세트 또는 목록에 저장하고 목록을 정렬하는 것입니다.


3

TreeMap 을 사용하여 지도를 정렬 할 수 있습니다.

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}

3

TreeMap정렬 된 형식으로 값을 저장 하는 것을 사용할 수 있습니다 .

Map <String, String> map = new TreeMap <String, String>();

2

TreeMap (생성자) 사용 :

Map<String, Float> sortedMap = new TreeMap<>(yourMap);

TreeMap (PutAll 메서드) 사용 :

Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);

지도 인터페이스 구현 :

  1. TreeMap- 삽입하는 동안 키를 오름차순으로 자동 정렬합니다.
  2. HashMap- 삽입 순서 가 유지 되지 않습니다 .
  3. LinkedHashMap- 삽입 순서가 유지됩니다.

1

TreeMap은 자동으로 오름차순으로 정렬됩니다. 내림차순으로 정렬하려면 다음 코드를 사용하십시오.

클래스 내부와 기본 실행 메서드 외부에 아래 코드를 복사합니다.

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }

그런 다음 논리에서 :

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.