키 값 연결이 있지만 해시를 사용하지 않는 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에 수백 개의 위젯을 추가하지 않아도 문제가되지 않습니다.