ProgramingTip

자바의 양방향지도?

bestdevel 2020. 10. 16. 07:44
반응형

자바의 양방향지도?


이 질문에 이미 답변이 있습니다.

Java에서 간단한 정수-문자열 매핑이 정수에서 쉽게 검색하고 정수를 검색 할 수 있습니다. 나는 맵을 시도했지만 정수에서 찾을 수 있습니다.

private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
// This works one way:
String myString = myMap.get(myInteger);

// I would need something like:
Integer myInteger = myMap.getKey(myString);

양방향으로 할 수있는 올바른 방법이 있습니까?

또 다른 문제는 변경되지 않는 상수 값이 몇 개 사용 1->"low", 2->"mid", 3->"high"되지 않습니다.


이를 위해 Google Collections API를 사용할 수 있으며 최근 이름이 Guava , 특히 BiMap으로 변경되었습니다.

바이 맵 (또는 "양방향 맵")은 값과 키의 고유성을 유지하는 맵입니다. 이 제약 조건을 사용하면 Bimap 이이 Bimap과 동일한 항목을 포함하지만 키와 값이 반전 된 또 Bimap 인 "역보기"를 지원할 수 있습니다.


Guava BiMap을 만들고 반전 값을 얻을 수 있습니다.

간단한 예 :

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

public class BiMapTest {

  public static void main(String[] args) {

    BiMap<String, String> biMap = HashBiMap.create();

    biMap.put("k1", "v1");
    biMap.put("k2", "v2");

    System.out.println("k1 = " + biMap.get("k1"));
    System.out.println("v2 = " + biMap.inverse().get("v2"));
  }
}

Java Standard API에는 양방향 맵이 없습니다. 두 개의 맵을 직접 유지하거나 Apache Collections BidiMap사용할 수 있습니다 .


Apache commons 컬렉션에는 BidiMap이 있습니다.


키, 값 쌍과 그 역을 모두 맵에 삽입 할 수 있습니다.

map.put("theKey", "theValue");
map.put("theValue", "theKey");

map.get ( "theValue")를 사용하면 "theKey"가 반환됩니다.

상수 맵을 통해 빠르고 더러운 방법이며 일부 데이터 세트에서만 작동합니다.

  • 1 ~ 1 쌍만 포함
  • 값 집합이 키 집합과 분리되어 있습니다 (1-> 2, 2-> 3은 중단됨).

유지 <Integer, String>두 번째 <String, Integer>맵을 유지 하여 값-> 키 쌍을 "입력" 할 수 있습니다.


Google의 BiMap 사용

더 편리합니다.

참고 URL : https://stackoverflow.com/questions/10699492/bi-directional-map-in-java

반응형