Programming

Map을 구현하고 삽입 순서를 유지하는 Java 클래스?

procodes 2020. 2. 18. 22:56
반응형

Map을 구현하고 삽입 순서를 유지하는 Java 클래스?


키 값 연결이 있지만 해시를 사용하지 않는 Java 클래스를 찾고 있습니다. 내가 현재하고있는 일은 다음과 같습니다.

  1. 에 값을 추가하십시오 Hashtable.
  2. 에 대한 반복자를 가져옵니다 Hashtable.entrySet().
  3. 모든 값을 반복하고 다음을 수행하십시오.
    1. Map.Entry이터레이터를 얻으십시오 .
    2. Module값을 기준으로 유형 (사용자 정의 클래스) 의 객체를 만듭니다 .
    3. 클래스를 JPanel에 추가하십시오.
  4. 패널을 표시하십시오.

이것의 문제는 값을 다시 얻는 순서를 제어 할 수 없기 때문에 주어진 순서대로 값을 표시 할 수 없다는 것입니다 (주문 하드 코딩없이).

나는 사용하는 것 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 클래스의 중요한 점은 다음과 같습니다.

  1. 고유 한 요소 만 포함합니다.
  2. 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



반응형