Java에서 키로 HashMap 정렬

Rashmi Patidar 2023년10월12일
  1. Java에서TreeMap클래스를 사용하여 키 세트 정렬
  2. Java 8 함수를 사용하여 키 집합 정렬
  3. Java의 맵 초기화 스트림 기능 이해
  4. Java의 맵 변환 스트림 기능 이해
Java에서 키로 HashMap 정렬

Java 언어의HashMap이라는 용어는Map인터페이스에서 파생 된 모음입니다. 이 컬렉션 또는 클래스는java.util패키지에 있으며 데이터를 키-값 쌍으로 저장합니다. 지도에는 두 개의 키가있을 수 없습니다. 중복 키가 삽입되면 각 키의 값이 최신 값으로 대체됩니다.

Java에서TreeMap클래스를 사용하여 키 세트 정렬

아래는 키별로HashMap의 정렬을 보여주는 코드 블록입니다.

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class HashMapSortByKey {
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("2", "Value5");
    map.put("3", "Value1");
    map.put("1", "Value2");
    map.put("4", "Value3");
    map.put("9", "Value4");
    map.put("hi11", "Value6");
    map.put("hi0", "Value7");
    System.out.print("Unordered List: ");
    for (String s : map.keySet()) {
      System.out.print(" " + s);
    }
    System.out.println();
    System.out.print("Ordered List: ");
    TreeMap<String, String> map1 = new TreeMap<>(map);
    for (String s : map1.keySet()) {
      System.out.print(" " + s);
    }
  }
}

위의 코드 블록에서map객체는new키워드와 함께HashMap의 기본 생성자를 사용하여 선언됩니다. 이 명령문은HashSet클래스의 인스턴스를 작성하고 값을Map인터페이스 참조에 할당합니다. HashMap클래스가Map인터페이스를 내부적으로 구현하므로 유형이 호환됩니다.

맵은 일부 키 값 세트로 초기화됩니다. 삽입은 키를 지정된 값에 바인딩하는put메소드를 사용하여 발생합니다. 이 메서드는 키가 이미지도에있는 경우이전 값을 반환하고 이전 값을 지정된 값으로 재정의합니다. 이 함수는 키가 맵에 아직없는 경우null값을 반환합니다. 키 또는 값의 속성이 값의 삽입을 금지하는 경우IllegalArgumentException이 발생합니다.

이제 맵을 반복하기 위해for-each루프가 사용됩니다. map.keySet함수는 맵에있는 모든 키의Set형식을 반환합니다. keyset 함수는 변수가 반복 할 수있는for-each루프에서 컬렉션을 가져옵니다. 따라서 키를 인쇄합니다. 순서가 지정되지 않은 형식으로 값을 인쇄하고 사용자가 출력을 얻는 잘 정의 된 방식이 없습니다.

맵 키를 정렬하기 위해TreeSet클래스가 사용됩니다. map변수는 인스턴스화시TreeSet생성자에서 생성자 매개 변수로 제공됩니다. 이 클래스는Comparable인터페이스를 구현하여 키를 정렬합니다. 결과 맵map1이 인쇄되면 출력에 정렬 된 키가 인쇄됩니다.

아래는 위 코드 블록의 출력입니다.

출력:

Unordered List:  1 hi11 2 3 4 9 hi0
Ordered List:  1 2 3 4 9 hi0 hi11

Java 8 함수를 사용하여 키 집합 정렬

Java 8은 기능적 프로그래밍의 권한을 제공하여 체인 기능에 대한 작업을 도와줍니다. 아래 프로그램에서 인스턴스화 및 초기화가 명령문에서 발생하는 것을 볼 수 있습니다. 첫 번째 예제 코드에서지도를 채우는 것은 지루한 작업입니다. Streams및 단일 명령문에서 맵을 인스턴스화하는 기능에 대한 이해는 다음과 같습니다.

Streams는 한 번에 일련의 작업을 유연하게 처리 할 수있는java.util 패키지의 인터페이스입니다. Streams는 이미 터가 데이터를 내보내는 파이프 라인에서 작동합니다. 사용자의 필요에 따라 필터링, 처리, 변환 등을 수행합니다.

import static java.util.AbstractMap.SimpleEntry;
import static java.util.stream.Collectors.toMap;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Stream;

public class HashMapSortByKey {
  public static void main(String[] args) {
    Map<String, String> map =
        Stream
            .of(new SimpleEntry<>("key6", "value1"), new SimpleEntry<>("key12", "value2"),
                new SimpleEntry<>("key9", "value3"))
            .collect(toMap(SimpleEntry::getKey, SimpleEntry::getValue));

    System.out.print("Unordered List: ");
    for (String s : map.keySet()) {
      System.out.print(" " + s);
    }
    Map<String, String> mapSortedByKey =
        map.entrySet()
            .stream()
            .sorted(Map.Entry.<String, String>comparingByKey().reversed())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (oldVal, newValue) -> oldValue, LinkedHashMap::new));

    System.out.println();
    System.out.print("Ordered List: ");
    for (String s1 : mapSortedByKey.keySet()) {
      System.out.print(" " + s1);
    }
  }
}

Java의 맵 초기화 스트림 기능 이해

첫째,Stream은 지정된 스트림을 순차적으로 반환하는of()함수를 호출합니다. 이 함수는SimpleEntry클래스의 개체를 만들어 키-값 형식의 매핑을 만듭니다. 이 클래스는Entry인터페이스를 구현하고 맵의 콜렉션보기를 리턴하는entrySet메소드가 있습니다.

키-값 항목이 형성되면collect기능을 사용하여 값이 맵에 수집됩니다. 수집 기능 후에 더 이상 메소드를 호출 할 수 없음을 의미하는 터미널 기능입니다. 함수는 원하는 데이터 구조의 스트림 값을 패키지화하거나 바인딩합니다.

매개 변수로 제공된 입력은 항상수집기참조입니다. toMap은 Map의 스트림 요소를 바인딩하는Collector를 리턴하는Collectors클래스의 정적 함수입니다. 이 함수는 매개 변수로 키 매퍼와 키 값함수를 사용합니다. 이제 메서드 참조::연산자는 지정된 클래스의 함수를 호출하는 것을 의미합니다.

키 매퍼에서getKey함수는 채워진EntrySet스트림에서 키를 추출합니다. 마찬가지로 키 Value 함수에서getValue함수가 호출되어EntrySet스트림에서 값을 가져옵니다.

위 코드의Collector``Function변수는 기능에 대한 단일 추상 메소드가있는 Java의 기능 인터페이스입니다. 추상 메서드의 정의는이를 구현하는 클래스에서 정의됩니다.

Java의 맵 변환 스트림 기능 이해

방금 형성된map인스턴스에서entrySet함수가 호출됩니다. 이 함수는지도 항목의 집합보기를 반환하며지도 인터페이스에 있습니다. 이러한 항목에 대해stream메소드가 호출되어 순차 스트림의 항목을 변환합니다. 엔트리 스트림을 통해sorted함수가 호출됩니다.

Stream요소를 비교하려면Comparator가 필요합니다. 정렬 된 함수는 마지막으로 주어진 항목의 정렬 된 스트림을 반환합니다. comparingByKey함수는 키에 대한 기본 순서와 함께Map.Entry비교기를 반환합니다. 비교기는 키 세트를 반환합니다. 발견 된 키가 null 인 경우 함수에서NullPointerException이 발생합니다.

항목 집합이 검색되면reversed함수가 호출되어 컬렉션의 요소 순서를 반대로합니다. 마지막으로collect함수가 맵 스트림을 통해 호출됩니다. 이 함수는 터미널 연산자이므로collect함수 후에 어떤 작업도 호출 할 수 없습니다. 함수에서toMap함수가 호출되어 스트림을 맵으로 변환합니다.

이 함수는 4 개의 매개 변수를 사용합니다.keyMapper는 키를 생성하는 함수,valueMapper는 값을 생성하는 매핑 함수,mergeFunction은 함수를 병합하는BinaryOperator,mapSupplier는 결과가 삽입되는 비어있는 새 맵을 반환하는Supplier함수. 마지막으로 결과 콘솔 출력이 위에 인쇄됩니다.

출력:

Unordered List:  key12 key6 key9
Ordered List:  key9 key6 key12
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

관련 문장 - Java HashMap