문제

최근 직장에서 아래 코드와 유사한 일부 코드(내가 다루고 있는 것과 유사하게 다시 생성됨)를 발견했습니다.

성능을 염두에 두고 하나의 데이터 구조를 사용하도록 아래 코드를 재작업할 수 있는 방법이 있습니까?

다음은 내가 의미하는 바를 설명하는 몇 가지 코드입니다.

public class ObjectMapper {

    private Map<UUID,Integer> uuidMap;
    private Map<Integer,UUID> indexMap;

    public ObjectMapper(){
        uuidMap = new HashMap<UUID,Integer>();
        indexMap = new HashMap<Integer,UUID>();
    }

    public void addMapping(int index, UUID uuid){
        uuidMap.put(uuid, index);
        indexMap.put(index, uuid);
    }


    .
    .
    .

    public Integer getIndexByUUID(UUID uuid){
        return uuidMap.get(uuid);
    }

    public UUID getUUIDByIndex(Integer index){
        return indexMap.get(index);
    }


}
도움이 되었습니까?

해결책

이것은 대답합니다 여기 Bimap을 사용하는 것이 좋습니다 Google 컬렉션

다른 팁

아파치 컬렉션은 지원합니다 Bidimap 인터페이스 및 다양한 상당히 효과적인 구현.

당신은 싱글을 사용할 수 있습니다 Map<Object,Object> 두 매핑을 모두 수행합니다. 못생긴. 성능은 거의 동일해야하거나, 당신이 많은 사람들이있을 가능성이 거의없는 이벤트에서 ObjectMapper맵핑 된 값이 거의 없습니다.

당신이 사용할 수있는 바이맵 ~에서 이클립스 컬렉션.

BiMap 사용자가 양방향에서 조회를 수행할 수 있는 지도입니다.BiMap의 키와 값은 모두 고유합니다.

주요 구현은 HashBiMap.

inverse()

BiMap.inverse() 키 유형과 값 유형의 위치가 바뀌는 뷰를 반환합니다.

MutableBiMap<Integer, String> biMap =
  HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3");
MutableBiMap<String, Integer> inverse = biMap.inverse();
Assert.assertEquals("1", biMap.get(1));
Assert.assertEquals(1, inverse.get("1"));
Assert.assertTrue(inverse.containsKey("3"));
Assert.assertEquals(2, inverse.put("2", 4));

put()

MutableBiMap.put() 다음과 같이 행동한다 Map.put() 중복 값이 ​​추가될 때 발생하는 것을 제외하고는 일반 맵에서 발생합니다.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.put(1, "1"); // behaves like a regular put()
biMap.put(1, "1"); // no effect
biMap.put(2, "1"); // throws IllegalArgumentException

forcePut()

이것은 다음과 같이 동작합니다 MutableBiMap.put(), 그러나 키-값 쌍을 맵에 넣기 전에 동일한 값을 가진 맵 항목을 자동으로 제거합니다.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.forcePut(1, "1"); // behaves like a regular put()
biMap.forcePut(1, "1"); // no effect
biMap.forcePut(1, "2"); // replaces the [1,"1"] pair with [1, "2"]
biMap.put(2, "2"); // removes the [1, "2"] pair before putting
Assert.assertFalse(biMap.containsKey(1));
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "1"), biMap);

메모: 저는 Eclipse 컬렉션의 커미터입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top