Java 순서 맵
Java에서는 키/값 쌍을 저장 및 액세스하기 위한 Map과 같은 기능을 하지만 키와 값 목록이 같은 순서로 되도록 키의 순서 목록과 값의 순서 목록을 반환할 수 있는 객체가 있습니까?
코드별 설명으로서 가상의 OrderedMap과 같은 동작을 하는 것을 찾고 있습니다.
OrderedMap<Integer, String> om = new OrderedMap<>();
om.put(0, "Zero");
om.put(7, "Seven");
String o = om.get(7); // o is "Seven"
List<Integer> keys = om.getKeys();
List<String> values = om.getValues();
for(int i = 0; i < keys.size(); i++)
{
Integer key = keys.get(i);
String value = values.get(i);
Assert(om.get(key) == value);
}
(실장 TreeMap을 사용하는) SortedMap 인터페이스가 친구가 되어야 합니다.
인터페이스에는 다음과 같은 메서드가 있습니다.
따라서 이 인터페이스는 고객의 요구 사항을 정확히 충족합니다.단, 키에는 의미 있는 순서가 필요합니다.그렇지 않으면 삽입 순서에 따라 순서가 결정되는 Linked Hash Map을 사용할 수 있습니다.
키/값 쌍을 저장 및 액세스하기 위한 맵과 같은 기능을 하지만 키와 값 목록이 같은 순서로 되도록 키의 순서 목록과 값의 순서 목록을 반환할 수 있는 객체가 있습니까?
java.util을 찾고 있습니다.Linked Hash Map.지도 목록이 나옵니다.엔트리 <K,V>쌍.항상 같은 순서로 반복됩니다.그 순서는 당신이 물건을 넣는 순서와 같습니다.또는 java.util을 사용합니다.SortedMap: 여기서 키는 자연스러운 순서를 가지거나 지정되어야 합니다.Comparator.
LinkedHashMap은 키의 순서를 유지합니다.
java.displaces를 클릭합니다.LinkedHashMap은 그 외에는 일반 HashMap과 동일하게 동작하는 것으로 보입니다.
프레임워크에서 얻을 수 있는 가장 가까운 컬렉션은 SortedMap입니다.
키 오름차순 또는 내림차순으로 액세스 및 통과 가능한 NavigableMap 인터페이스를 활용할 수 있습니다.이 인터페이스는 SortedMap 인터페이스를 대체하기 위한 것입니다.Navigable map은 일반적으로 키의 자연스러운 순서 또는 지도 작성 시 제공되는 Comparator에 따라 정렬됩니다.
가장 유용한 구현은 다음 3가지입니다.TreeMap, UnmutableSortedMap 및 ConcurrentSkipListMap.
TreeMap의 예:
TreeMap<String, Integer> users = new TreeMap<String, Integer>();
users.put("Bob", 1);
users.put("Alice", 2);
users.put("John", 3);
for (String key: users.keySet()) {
System.out.println(key + " (ID = "+ users.get(key) + ")");
}
출력:
Alice (ID = 2)
Bob (ID = 1)
John (ID = 3)
dr;dr
유지하기 위해Map< Integer , String >키를 기준으로 정렬된 순서로 NavigableMap/ 인터페이스를 구현하는 다음 두 가지 클래스 중 하나를 사용합니다.
…또는 서드파티제의 실장.Google Guava 이클립스 Collections(확인하지 않았습니다)에 있을 수 있습니다.
스레드 할 경우 스레드 합니다.TreeMap하는 경우는,의 「두 번째」 「두 번째」 「두 번째」 「두 번째」 「두 번째」를 ConcurrentSkipListMap.
자세한 내용은 아래 표와 다음 설명을 참조하십시오.
세부 사항
을 나타낸 입니다.MapJava 11에 번들된 구현입니다.
인터페이스는 의 후계자입니다.그SortedMap논리적으로는 삭제할 필요가 있지만 일부 서드파티 맵 실장에서는 인터페이스를 사용할 수 없기 때문에 삭제할 수 없습니다.
에서 알 수 만이 2개의 클래스만을 .SortedMap/NavigableMap★★★★★★★★★★★★★★★★★★:
둘 다 키를 정렬된 순서로 유지하며, 그 순서는 모두 자연 순서입니다(의 방법을 사용).Comparable(https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html) interface) 또는 패스한 실장에 의해서.이 두 클래스의 차이점은 두 번째 클래스인 스레드 세이프가 높고 동시성이 높다는 점입니다.
아래 표의 반복 순서 열을 참조하십시오.
- 클래스는 엔트리를 처음 삽입한 순서대로 반환합니다.
EnumMap는 키의 열거 클래스가 정의된 순서로 엔트리를 반환합니다.예를 들어, 어느 종업원이 어느 요일을 커버하고 있는지를 나타내는 지도(Map< DayOfWeek , Person >)는 Java에 내장된 열거 클래스를 사용합니다.이 열거형은 월요일 첫 번째와 일요일 마지막으로 정의됩니다.따라서 반복기의 엔트리는 그 순서로 표시됩니다.
나머지 6개의 구현에서는 엔트리를 보고하는 순서에 대해 약속하지 않습니다.
SortedMap 인터페이스는 사용자가 요구하는 것을 실행하고 TreeMap은 그것을 구현한다고 생각합니다.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html
Java 6 이후로는 TreeMap의 논블로킹 스레드 세이프 대안도 있습니다.ConcurrentSkipListMap을 참조하십시오.
Simple Hash Map, Linked List 및 Collections를 사용하여 맵을 값별로 정렬했습니다.
import java.util.*;
import java.util.Map.*;
public class Solution {
public static void main(String[] args) {
// create a simple hash map and insert some key-value pairs into it
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("Python", 3);
map.put("C", 0);
map.put("JavaScript", 4);
map.put("C++", 1);
map.put("Golang", 5);
map.put("Java", 2);
// Create a linked list from the above map entries
List<Entry<String, Integer>> list = new LinkedList<Entry<String, Integer>>(map.entrySet());
// sort the linked list using Collections.sort()
Collections.sort(list, new Comparator<Entry<String, Integer>>(){
@Override
public int compare(Entry<String, Integer> m1, Entry<String, Integer> m2) {
return m1.getValue().compareTo(m2.getValue());
}
});
for(Entry<String, Integer> value: list) {
System.out.println(value);
}
}
}
출력은 다음과 같습니다.
C=0
C++=1
Java=2
Python=3
JavaScript=4
Golang=5
Steffi Keran의 답변의 최신 Java 버전
public class Solution {
public static void main(String[] args) {
// create a simple hash map and insert some key-value pairs into it
Map<String, Integer> map = new HashMap<>();
map.put("Python", 3);
map.put("C", 0);
map.put("JavaScript", 4);
map.put("C++", 1);
map.put("Golang", 5);
map.put("Java", 2);
// Create a linked list from the above map entries
List<Map.Entry<String, Integer>> list = new LinkedList<>(map.entrySet());
// sort the linked list using Collections.sort()
list.sort(Comparator.comparing(Map.Entry::getValue));
list.forEach(System.out::println);
}
}
언급URL : https://stackoverflow.com/questions/663374/java-ordered-map
'source' 카테고리의 다른 글
| 문자열 번호에 쉼표와 반올림 형식을 지정하려면 어떻게 해야 합니까? (0) | 2022.08.11 |
|---|---|
| Deque over Stack을 사용해야 하는 이유 (0) | 2022.08.11 |
| Java의 SimpleDateFormat이 스레드 세이프가 아닌 이유는 무엇입니까? (0) | 2022.08.11 |
| Java 비트맵을 바이트 배열로 변환 (0) | 2022.08.11 |
| Store vuex가 정의되지 않은 속성 'store'를 읽을 수 없습니다." (0) | 2022.08.10 |
