[java] 자바 주문지도

Java에는 키 / 값 쌍을 저장하고 액세스하기위한 맵처럼 작동하지만 키 및 값 목록이 동일한 순서로 정렬 된 키 목록과 정렬 된 값 목록을 리턴 할 수있는 오브젝트가 있습니까?

코드 별 설명으로 가상의 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);
}



답변

의 SortedMap의 (구현과 인터페이스 트리 맵은 ) 당신의 친구가되어야한다.

인터페이스에는 다음과 같은 방법이 있습니다.

  • keySet() 키 세트를 오름차순으로 반환
  • values() 이는 해당 키의 오름차순으로 모든 값의 콜렉션을 리턴합니다.

따라서이 인터페이스는 요구 사항을 정확하게 충족시킵니다. 그러나 키에는 의미있는 순서가 있어야합니다. 그렇지 않으면 주문이 게재 신청서에 의해 결정되는 LinkedHashMap을 사용할 수 있습니다 .


답변

키 / 값 쌍을 저장하고 액세스하는 맵처럼 작동하지만 정렬 된 키 목록과 정렬 된 값 목록을 반환하여 키와 값 목록의 순서가 같은 객체가 있습니까?

당신은 java.util.LinkedHashMap을 찾고 있습니다. 항상 같은 순서로 반복되는 Map.Entry <K, V> 쌍 목록이 표시 됩니다. 순서는 항목을 넣는 순서와 동일합니다. 또는 java.util.SortedMap을 사용하십시오. 여기서 키는 자연 순서를 갖거나로 지정해야합니다 Comparator.


답변

LinkedHashMap은 키의 순서를 유지합니다.

java.util.LinkedHashMap은 일반 HashMap과 동일하게 작동하는 것으로 보입니다.


답변

프레임 워크에서 얻을 수있는 가장 가까운 컬렉션은 SortedMap 이라고 생각합니다.


답변

오름차순 또는 내림차순으로 액세스하고 탐색 할 수있는 NavigableMap 인터페이스를 활용할 수 있습니다 . 이 인터페이스는 SortedMap 인터페이스 를 대체하기위한 것 입니다. 탐색 가능한지도는 일반적으로 키의 자연 순서에 따라 또는지도를 만들 때 제공되는 비교기로 정렬됩니다.

가장 유용한 3 가지 구현이 있습니다 : TreeMap , ImmutableSortedMapConcurrentSkipListMap 입니다.

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)


답변

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을 참조하십시오 .