Map을 구현하고 삽입 순서를 유지하는 Java 클래스?
키 값 연결이 있지만 해시를 사용하지 않는 Java 클래스를 찾고 있습니다. 내가 현재하고있는 일은 다음과 같습니다.
- 에 값을 추가하십시오
Hashtable
. - 에 대한 반복자를 가져옵니다
Hashtable.entrySet()
. - 모든 값을 반복하고 다음을 수행하십시오.
Map.Entry
이터레이터를 얻으십시오 .Module
값을 기준으로 유형 (사용자 정의 클래스) 의 객체를 만듭니다 .- 클래스를 JPanel에 추가하십시오.
- 패널을 표시하십시오.
이것의 문제는 값을 다시 얻는 순서를 제어 할 수 없기 때문에 주어진 순서대로 값을 표시 할 수 없다는 것입니다 (주문 하드 코딩없이).
나는 사용하는 것 ArrayList
또는 Vector
이것에 대한,하지만 나중에 코드에서 나는 잡을 필요가 Module
내가 함께 할 수없는 주어진 키에 대한 객체를 ArrayList
하거나 Vector
.
누구 든지이 작업을 수행 할 무료 / 오픈 소스 Java 클래스 또는 Hashtable
추가 된 시점을 기준으로 값을 얻는 방법을 알고 있습니까?
감사!
나는 LinkedHashMap
또는을 제안한다 TreeMap
. A LinkedHashMap
는 삽입 된 순서대로 키를 유지하고 a TreeMap
는 요소 Comparator
의 자연 Comparable
순서 또는 정렬을 통해 정렬됩니다 .
요소를 정렬하지 않아도되므로 LinkedHashMap
대부분의 경우 더 빠릅니다. TreeMap
보유 O(log n)
성능을 containsKey
, get
, put
, 및 remove
, JavaDoc을 따라 동안이 LinkedHashMap
있다 O(1)
마다.
특정 정렬 순서와 반대로 만, 예측 가능한 정렬 순서를 예상하여 API는, 인터페이스를 사용하는 것을 고려하면이 두 클래스는 구현, NavigableMap
또는 SortedMap
. 이를 통해 특정 구현을 API로 유출하지 않고 해당 특정 클래스 중 하나 또는 나중에 완전히 다른 구현으로 전환 할 수 있습니다.
LinkedHashMap은지도의 keySet (), entrySet () 또는 values ()를 반복 할 때지도에 삽입 된 순서대로 요소를 반환합니다.
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("id", "1");
map.put("name", "rohan");
map.put("age", "26");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
그러면 맵에 배치 된 순서대로 요소가 인쇄됩니다.
id = 1
name = rohan
age = 26
불변의 맵이 귀하의 요구에 맞는 경우 구글에 의해 구아바 라는 도서관이 있습니다 ( 구아바 질문 참조 )
Guava 는 신뢰할 수있는 사용자 지정 반복 순서 로 ImmutableMap 을 제공합니다 . 이 ImmutableMap 은 containsKey에 대해 O (1) 성능을 갖습니다. 분명히 넣고 제거는 지원되지 않습니다.
ImmutableMap 객체는 우아한 정적 편의 메서드 of () 및 copyOf () 또는 Builder 객체 를 사용하여 구성됩니다 .
Map
(빠른 조회 List
를 위해) 및 (순서를 위해) 유지할 수 있지만 a LinkedHashMap
가 가장 간단 할 수 있습니다. 또한 시도 할 수 있습니다 SortedMap
예를 들어 TreeMap
사용자가 지정한 임의의 순서를 가지고있는.
오픈 소스인지는 모르겠지만 약간의 인터넷 검색 결과 ArrayList 사용 하여이 Map 구현을 발견 했습니다 . 1.5 이전의 Java 인 것 같으므로 일반화 할 수도 있습니다. 이 구현에는 O (N) 액세스 권한이 있지만 JPanel에 수백 개의 위젯을 추가하지 않아도 문제가되지 않습니다.
내 링크 트리 맵 구현을 시도 할 수 있습니다.
미리 알려진 것의 자연스러운 순서를 유지해야 할 때마다 EnumMap을 사용합니다.
키는 열거 형이며 원하는 순서로 삽입 할 수 있지만 반복하면 열거 형 순서 (자연 순서)로 반복됩니다.
또한 EnumMap을 사용할 때 더 효율적인 충돌이 없어야합니다.
enumMap을 사용하면 읽을 수있는 코드가 깨끗해집니다. 여기에 예가 있습니다
LinkedHashMap 을 사용하여 Map의 기본 게재 신청서에
Java LinkedHashMap 클래스의 중요한 점은 다음과 같습니다.
- 고유 한 요소 만 포함합니다.
LinkedHashMap에는 키 3을 기반으로하는 값이 포함됩니다. 하나의 널 키와 여러 개의 널 값이있을 수 있습니다. 4. HashMap과 동일하지만 삽입 순서를 유지합니다.
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
그러나 사용자 정의 객체 또는 기본 데이터 유형 키를 사용하여 맵에서 정렬 값을 원할 경우 TreeMap 을 사용해야합니다. 자세한 정보는 이 링크를 참조하십시오.
참고 URL : https://stackoverflow.com/questions/683518/java-class-that-implements-map-and-keeps-insertion-order
'Programming' 카테고리의 다른 글
C #에서 XML을 작성하는 방법 (0) | 2020.02.18 |
---|---|
Android 기본 사항 : UI 스레드에서 코드 실행 (0) | 2020.02.18 |
JavaScript를 최소화 / 압축 해제하는 도구 (0) | 2020.02.18 |
MongoDB 데이터베이스에서 모든 것을 삭제하십시오 (0) | 2020.02.18 |
JSON.stringify와 JSON.parse의 차이점 (0) | 2020.02.18 |