HOWTO · Java
Java에서 키로 HashMap 정렬
이 기사에서는 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