자바에서 양방향지도를 만드는 방법
1 : 1 관계로 string-int 값 쌍을 저장하는 데이터 구조가 필요하며 어느 쪽에서도 대응할 수 있습니다.
Hashtable 및 String 배열로 클래스를 작성하고 데이터를 두 번 저장하고 조회를 위해 내장 함수를 사용했습니다.
내 질문은 이것을 달성하는 더 좋은 방법이 있습니까? 그리고 더 좋게 말하면 효율적이고 데이터를 두 번 저장하지 않고 바람직하게는 많은 코드를 작성하지 않고 : P를 의미합니다.
bimap을 찾고있는 것 같습니다.
Google 컬렉션 (현재 Guava 의 일부 )에는 BiMap
몇 가지 구현 이있는 인터페이스가 포함되어 있습니다 .
로부터 BiMap
문서 :
바이 맵 (또는 "양방향 맵")은 값과 키의 고유성을 유지하는 맵입니다. 이 제약 조건을 통해 Bimap은이 Bimap과 동일한 항목을 포함하지만 키와 값이 반전 된 또 다른 Bimap 인 "역보기"를 지원할 수 있습니다.
이 BiMap.inverse
메서드 Map
는 값을 키로, 키를 값으로 반환하는 것처럼 보이 므로 값 Map
을 호출 get
하고 키를 검색하는 데 사용할 수 있습니다 .
또한에서 Map
반환하는 inverse
것은 기본 데이터의보기이므로 원본 데이터의 추가 복사본을 만들 필요가 없습니다.
로부터 BiMap.inverse
방법 문서 :
이 Bimap의 각 값을 연관된 키에 매핑하는이 Bimap의 역 뷰를 반환합니다. 두 개의 Bimap은 동일한 데이터로 뒷받침됩니다. 하나에 대한 모든 변경 사항은 다른 하나에 나타납니다.
이와 같은 간단한 구현을 할 수 있습니다. 이 구현에서는 데이터가 복사되지 않습니다. 참조 만! 추가 및 가져 오기에 대한 구현을 추가했습니다. 제거 및 기타 필요한 방법은 운동으로 남겨 둡니다. :)
public class TwoWayHashmap<K extends Object, V extends Object> {
private Map<K,V> forward = new Hashtable<K, V>();
private Map<V,K> backward = new Hashtable<V, K>();
public synchronized void add(K key, V value) {
forward.put(key, value);
backward.put(value, key);
}
public synchronized V getForward(K key) {
return forward.get(key);
}
public synchronized K getBackward(V key) {
return backward.get(key);
}
}
그리고 당연히 '가치'조차도 뒤 따르는 애플리케이션 책임은 독특합니다. 사용 예 :
TwoWayHashmap twmap = new TwoWayHashmap<String, String>();
twmap.add("aaa", "bbb");
twmap.add("xxx", "yyy");
System.out.println(twmap.getForward("xxx"));
System.out.println(twmap.getBackward("bbb"));
Apache Commons에는 BidiMap (Bi Directional Map) 도 포함되어 있습니다.
키와 값 사이의 양방향 조회를 허용하는 맵을 정의합니다.
이 확장 맵은 키가 값을 조회 할 수 있고 값이 키를 동등하게 쉽게 조회 할 수있는 매핑을 나타냅니다. 이 인터페이스는지도를 확장하므로지도가 필요한 모든 곳에서 사용할 수 있습니다. 인터페이스는 역지도보기를 제공하여 BidiMap의 양방향에 대한 전체 액세스를 가능하게합니다.
Google Guava 에는 원하는 작업 을 수행 하는 BiMap 이 있습니다.
Guava 사용 ,
HashBiMap<String, String> map = HashBiMap.create();
map.put("name", "Sohail");
map.put("country", "Pakistan");
Log.d("tag", "name is " + map.get("name"));
BiMap<String, String>invmap= map.inverse();
Log.d("tag", "Pakistan is a " + invmap.get("Pakistan"));
Object를 Object에 매핑하는 해시 맵을 만듭니다. 그런 다음 동일한 맵을 사용하여 String-> Integer 및 Integer-> String을 저장할 수 있습니다.
string / int 쌍을 추가 할 때 동일한 맵에 양방향으로 추가하면됩니다.
참조 URL : https://stackoverflow.com/questions/3430170/how-to-create-a-2-way-map-in-java
'Programing' 카테고리의 다른 글
PHP에서 람다는 무엇을 사용합니까? (0) | 2021.01.07 |
---|---|
PI = 4 * ATAN (1.d0)을 정의하는 이유 (0) | 2021.01.07 |
동일한 프로젝트에서 Eclipse junit 테스트 (0) | 2021.01.07 |
XMLHttpRequest는 jQuery로 URL을로드 할 수 없습니다. (0) | 2021.01.07 |
Razor 구문 및 자바 스크립트 (0) | 2021.01.07 |