Java에서 HashMap 정렬

Aryan Tyagi 2023년10월12일
  1. Java에서 키로 HashMap 정렬
  2. Python에서 값으로 HashMap 정렬
Java에서 HashMap 정렬

Hashmap은 정렬 용으로 만들어지지 않았습니다. 빠른 검색을 위해 만들어졌습니다. 따라서 훨씬 쉬운 방법은 Hashmap에서 각 요소를 가져 와서 정렬에 더 적합한 데이터 구조 (예 : 힙 또는 집합)에 배치 한 다음 거기에서 정렬하는 것입니다.

그러나 해시 맵을 사용하여 정렬하는 것이 아이디어라면이 튜토리얼에서 몇 가지 방법을 논의 할 것입니다.

HashMap을 정렬해야하는 경우 필요한 기준에 따라 명시 적으로 수행합니다. Java에서 키 또는 값으로 HashMaps를 정렬 할 수 있습니다.

Java에서 키로 HashMap 정렬

키를 사용하여LinkedHashMap또는TreeMap의 두 가지 방법으로 HashMap을 정렬 할 수 있습니다.

LinkedHashMap접근 방식을 사용하는 동안 키 세트를 확보하는 것이 중요합니다. 이러한 키 세트를 받으면이를 목록으로 변환합니다. 이 목록은 그에 따라 정렬되고 동일한 순서로LinkedHashMap에 추가됩니다. 키별로 HashMap을 정렬 할 때 키가 중복되지 않습니다.

암호:

import static java.util.stream.Collectors.*;

import java.lang.*;
import java.util.*;
import java.util.stream.*;
import java.util.stream.Collectors;
public class Main {
  // unsorted
  static Map<String, Integer> lhmap = new HashMap<>();

  public static void sort() {
    HashMap<String, Integer> x = lhmap.entrySet()
                                     .stream()
                                     .sorted((i1, i2) -> i1.getKey().compareTo(i2.getKey()))
                                     .collect(Collectors.toMap(Map.Entry::getKey,
                                         Map.Entry::getValue, (z1, z2) -> z1, LinkedHashMap::new));

    // Show Sorted HashMap
    for (Map.Entry<String, Integer> start : x.entrySet()) {
      System.out.println("Your Key " + start.getKey() + ", Your Value = " + start.getValue());
    }
  }

  public static void main(String args[]) {
    // insert value
    lhmap.put("a", 1);
    lhmap.put("aa", 3);
    lhmap.put("ab", 5);
    lhmap.put("ba", 7);
    lhmap.put("bb", 8);
    lhmap.put("aac", 23);
    lhmap.put("bac", 8);
    sort();
  }
}

출력:

Your Key a, Your Value = 1
Your Key aa, Your Value = 3
Your Key aac, Your Value = 23
Your Key ab, Your Value = 5
Your Key ba, Your Value = 7
Your Key bac, Your Value = 8
Your Key bb, Your Value = 8

TreeMap을 사용할 수도 있습니다. SortedMap의 구현 중 하나는TreeMap을 생성하는 동안 제공된 비교기에 의해 지정된 자연 순서 또는 사용자 정의 순서로 키를 유지하는 데 도움이되는TreeMap입니다. 이것은 사용자가 정렬 된 순서로 HashMap의 항목을 처리 할 수 ​​있음을 의미합니다. 그러나 사용자는 HashMap이 순서를 보장하지 않기 때문에 특정 순서로 매핑 된 HashMap을 전달할 수 없습니다.

암호:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class SortHashmap {
  public static void main(String args[]) {
    // Create a HashMap object ob
    HashMap<Integer, String> ob = new HashMap<Integer, String>();
    // addding keys and values
    ob.put(23, "Vedant");
    ob.put(7, "Aryan");
    ob.put(17, "Tarun");
    ob.put(9, "Farhan");
    Iterator<Integer> it = ob.keySet().iterator();
    System.out.println("Before Sorting");
    while (it.hasNext()) {
      int key = (int) it.next();
      System.out.println("Roll number:  " + key + "     name:   " + ob.get(key));
    }
    System.out.println("\n");
    Map<Integer, String> map = new HashMap<Integer, String>();
    System.out.println("After Sorting");
    // using the TreeMap constructor in order to sort the HashMap
    TreeMap<Integer, String> tm = new TreeMap<Integer, String>(ob);
    Iterator itr = tm.keySet().iterator();
    while (itr.hasNext()) {
      int key = (int) itr.next();
      System.out.println("Roll no:  " + key + "     name:   " + ob.get(key));
    }
  }
}

Python에서 값으로 HashMap 정렬

이 방법은 항목 항목을 목록에 보관 한 다음 해당 값에 따라 항목 목록을 정렬하는 것을 목표로합니다. 이러한 값과 키는 항목 목록에서 검색된 다음 그에 따라 새 HashMap에 배치됩니다.
이 새로운 HashMap으로 인해 전적으로 값을 기준으로 정렬됩니다.

값을 기준으로 항목을 비교하려면comparator를 만들어야합니다. 이 접근 방식을 사용하는 동안 우리는 중복 값을 저장할 수 있음을 명심해야합니다.

아래 코드를 참조하십시오.

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class SortingByValue // implementing the HashMap
{
  Map<String, Integer> map = new HashMap<String, Integer>();
  public static void main(String[] args) {
    SortingByValue ob = new SortingByValue();
    ob.TheMap();
    System.out.println("SORTING IN ASCENDING ORDER:");
    ob.SortingByValue(true);
    System.out.println("SORTING IN DESCENDING ORDER");
    ob.SortingByValue(false);
  }

  void TheMap() // Creating a method to add elements into the  HashMap
  {
    map.put("SUZUKI", 65090);
    map.put("HERO", 24020);
    map.put("DUCATI", 90000);
    map.put("YAMAHA", 71478);
    map.put("HARLEY", 86946);
    map.put("KWASAKI", 99990);
    System.out.println("VALUE BEFORE SORTING:: ");
    printMap(map);
  }
  // sorting the elements ACCORDING to values
  void SortingByValue(boolean order) {
    // converting HashMap into a List
    List<Entry<String, Integer>> list = new LinkedList<Entry<String, Integer>>(map.entrySet());
    // sorting the list comprising items
    Collections.sort(list, new Comparator<Entry<String, Integer>>() {
      public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
        if (order) {
          // comparing the two object and returning an integer
          return obj1.getValue().compareTo(obj2.getValue());
        } else {
          return obj2.getValue().compareTo(obj1.getValue());
        }
      }
    });
    // Displaying the sorted HashMap
    Map<String, Integer> sortedhashMap = new LinkedHashMap<String, Integer>();
    for (Entry<String, Integer> entry : list) {
      sortedhashMap.put(entry.getKey(), entry.getValue());
    }
    printMap(sortedhashMap);
  }
  // Function for Displaying the elements
  public void printMap(Map<String, Integer> map) {
    System.out.println("BIKE\t\t PRICE ");
    for (Entry<String, Integer> entry : map.entrySet()) {
      System.out.println(entry.getKey() + "\t \t" + entry.getValue());
    }
    System.out.println("\n");
  }
}

관련 문장 - Java HashMap