문제

나는 두 가지 종류의 개체 내 응용 프로그램에서 모든 물체의 하나의 종류는 해당 개체의 다른 종류이다.

분명한 선택을 추적하이의 관계 Map<type1, type2>, 처럼,HashMap.하지만,어떻게든 내가 의심스러운입니다.를 사용할 수 있는 개체는 열쇠로서 지도,전달,그것은 앉아서 또 다른 수집,너무,그리고 검색의 파트너의 지도에서 어떤 시간입니까?

객체를 작성한 후에,모든은자,권?그래서 아마 아무 문제입니다.면 어떻게를 직렬화하고 deserialize 키?

다른 어떤 사항이?이용해야 하는 다른 무언가 상관하는 개체 쌍과 같은 번호를 생성하는가?

도움이 되었습니까?

해결책

  1. 키는 구현해야합니다 .equals() 그리고 .hashCode() 바르게
  2. 열쇠 안됩니다 어떤 식 으로든 변경해야합니다 .hashCode() 값은 키로 사용되는 동안 값입니다
  3. 이상적으로는 a에서 키로 사용되는 모든 객체입니다 HashMap 불변이어야합니다. 이것은 자동으로 2. 2가 항상 사실이되도록 보장합니다.
  4. 그렇지 않으면 GCED가 될 수있는 물체는 키 및/또는 값으로 사용될 때 주위에 유지 될 수 있습니다.

다른 팁

내 응용 프로그램에는 두 종류의 객체가 있는데, 한 종류의 모든 객체는 다른 종류의 다른 종류의 대응 객체를 가지고 있습니다.

이것은 실제로 관계처럼 들리므로 간단한 속성을 사용하여 구현할 수 있습니다.

선택한 맵의 구현에 따라 다릅니다.

  • 해시 맵 용도 equals () 그리고 해시 코드(). 기본적으로 (객체에서) 이들은 객체 아이덴티티를 기반으로하며, 이는 직렬화/사제화되지 않으면 정상적으로 작동합니다. 객체의 내용을 기반으로 equals () 및 hashcode ()를 올바르게 구현하면 해시 맵의 키인 동안 수정하지 않는 한 아무런 문제가 없습니다.

  • 트리 맵 용도 비교 (). 기본 구현은 없으므로 하나를 제공해야합니다. 위의 hashcode () 및 equals ()를 구현하는 것과 동일한 제한이 적용됩니다.

를 사용할 수 있습 표준 지도 있지만,그렇게 당신을 유지에 대한 강력한 참조하의 개체를 수집합니다.하는 경우 객체가에서 참조하는 다른 구조를 구하고 필요할지도 그냥 그들을 링크를 함께 사용하십시오 WeakHashMap.

그리고 그런데 당신은 없을 재정의 동등하게 차지 않는 한 당신이 고려해야 할 몇 가지 경우 객체의 동등한 것으로...

객체를지도에서 키로 사용하고, 전달하고, 다른 컬렉션에 앉아 있고, 언제든지지도에서 파트너를 검색 할 수 있습니까?

예, 여기서 전혀 문제가 없습니다.

객체가 만들어지면 내가 지나가는 것은 식별자입니다. 아마 거기에 문제가 없을 것입니다. 키를 직렬화하고 조작하면 어떻게됩니까?

맞습니다. 당신은 주변에만 참조를 전달하고 있습니다. 그들은 모두 같은 실제 객체를 가리킬 것입니다. 객체를 직렬화하거나 사로화하면 새 객체가 생성됩니다. 그러나 객체 구현이 동일하고 해시 코드가 올바르게 해당되는 경우에도 새로화 된 객체를 사용하여 맵에서 항목을 검색 할 수 있어야합니다.

다른 경고가 있습니까? 내가 생성하는 숫자처럼 객체 쌍을 상관시키기 위해 다른 것을 사용해야합니까?

경고에 관해서는, 객체가 맵에있는 동안 객체의 해시 코드가 변경 될 수있는 것을 변경할 수 없습니다.

모든 객체는 맵 키 일 수 있습니다. 여기서 중요한 것은 맵 키로 사용될 객체에 대해 .quals () 및 .hashcode ()를 재정의하는 것입니다.

이렇게하는 이유는 그렇지 않은 경우, 동등한 것이 객체 평등으로 이해되기 때문에 "동일한"맵 키를 찾을 수있는 유일한 방법은 원래 객체 자체를 처리하는 것입니다.

해시 코드는 평등과 일치해야하므로 해시 코드를 무시합니다. 이것은 당신이 정의 한 객체가 해시와 동일하게 동일하게하기 위해서입니다.

실패 지점은 해시 코드이며 함수와 같습니다. 일관되고 적절한 반환 값을 생성하지 않으면지도는 이상하게 행동합니다. 효과적인 자바 그들에 대한 전체 섹션이 있으며 매우 권장됩니다.

Google Collection을 고려할 수 있습니다 Bimap.

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