배열을 HashMap의 키로 사용하려고합니다. 배열의 길이는 2이므로 본질적으로 2- 튜플의 역할을합니다. 사용자 정의 2 튜플 클래스를 구현하는 것은 매우 최후의 수단입니다. 문제는, 같은 내용의 맵을 가진 배열이 HashMap의 서로 다른 위치에 다른 위치에 있으면 좋겠다. Arrays.hashCode 및 Arrays.deepHashCode에 hashCode 함수가 있다는 것을 알고 있지만 HashMap에 사용할 수있는 방법이 있습니다. 이미 말했듯이, 나는 정말로 내 자신의 튜플 클래스를 구현하고 싶지 않다.배열을 해시 맵 키로 사용
답변
좋아 해결책을 찾았습니다. 배열 대신에 List를 사용했습니다. 이것은 List가 참조가 아닌 내용별로 동등성을 결정하기 때문에 가능합니다.
나는 이 아닙니다.은이 방법을 권장합니다.
키는 변경 가능해야합니다. 배열을 그렇게 만들지 않는다면 위험이 따르게 될 것입니다.
Java는 객체 지향 언어입니다. 나는 프리미티브 측면에서 너무 많이 생각하는 것이 실수라고 생각한다. 객체에 필요한 적절한 동작을 캡슐화합니다.
왜 자신 만의 수업을 만드는 것이 그렇게 억울한가요? 최후의 조치? 이것이 왜 그렇게 큰 이유인지 이해할 수 없습니다. 그것을 창조하고, 불변으로 만들고, 명확하게 당신의 의도를 문서화하고 계속 나아 간다.
업데이트 : 당신이 이미 결함있는 튜플 클래스를 가지고 있다는 사실로 인해이 경우에 올바른 일을하지 못하게 할 수는 없습니다. 당신은 "수백 개의 수업"을 가지고 있다고 말합니다 - 나는 하나 더 옳은 일을하는 것이 당신을 해치지 않을 것이라고 말합니다. 코드는 당신이하려고하는 것과 같은 "실용적인"나쁜 결정의 축적을 통해 혼란에 빠지게됩니다. 이 협소 한 문제에 대한 올바른 해결책을 만들어 벼락치기에 더해지기를 결단하고 거기에서 더 나은 대답으로 나가는 길을 시작하십시오.
우리는 이미 튜플 구현을 가지고 있지만 serializer로 직렬화 할 수 없으며이 정보를 직렬화해야합니다. 저는 기능을 복제하지 않을 것이며, 튜플 구현은 수백 개의 클래스에 걸쳐있는 우리 프로젝트의 주요 데이터 구조 중 하나입니다. – Max
올바른 해결책은 그것을 빨아 들이고 새로운'Pair' 클래스를 작성하는 것입니다. 더 나은 이름과 특정 필드 이름을 가진 클래스를 작성하는 것이 더 좋습니다. 다른 요소가 다른 의미를 가질 때 배열을 사용해서는 안됩니다. 'Arrays.equals' 또는'Arrays.hashCode'를 여기에 사용하는 방법이 있더라도 새로운 클래스를 작성하는 것은 명확한 해결책이 될 것입니다. –
@Max - 간단한 해결책은 기존 (불변) 튜플 유형을 직렬화 가능하게 변경하는 것입니다. 그게 위험한거야? 튜플 클래스를 직렬화하는 것은 튜플을 직렬화하려고하지 않는 기존 코드를 깨뜨릴 수 없습니다. –
문제는 다른 메모리 위치가있는 경우 HashMap의 다른 위치에 동일한 컨텐츠 맵을 가진 배열을 배치하고 싶습니다.
만약 내용 배열의 다른 메모리 위치가있는 경우 서로 다른 메모리 위치를, 또는배열? 이전 버전 인 경우 보통 HashMap
대신 IdentityHashMap
을 사용할 수 있습니다. 그러나 후자의 경우 @ duffymo의 답변에 동의합니다 : grow a pair;)
- 1. 비트 맵 이미지를 사전 키로 사용
- 2. 동시 해시 맵 사용
- 3. 해시 맵에서 해시 값을 키로 사용
- 4. 문자 배열을 Hashtable 키로 사용
- 5. 스칼라에서 case 클래스를 키로 사용하는 효율적인 맵?
- 6. 해시 키로 개체
- 7. 다른 클래스의 해시 세트에서 해시 맵 채우기
- 8. 해시 맵
- 9. 클래스 키가있는 약한 해시 맵
- 10. 해시 맵 오버 해시 목록
- 11. 자바 스크립트의 정수 키에서 해시 맵
- 12. 맵 키로 사용되는 오브젝트 변경
- 13. 상수 키로 Hibernate 맵 콜렉션
- 14. 해시 구조의 키로 배열 작성
- 15. 블랙 베리 해시 맵
- 16. 해시 맵 오브젝트 키
- 17. 해시 맵 복사본
- 18. 해시 멀티 맵 문제
- 19. 해시 맵 크래킹 이식
- 20. 해시 맵 검색
- 21. 배열의 해시 맵 재사용
- 22. 해시 배열을 해시 배열로 변환
- 23. 해시 맵 값에서 객체 배열의 배열을 가져 오는 방법은 무엇입니까?
- 24. NSObject를 NSDictionary의 키로 사용 하시겠습니까?
- 25. RoR에서 해시 만들기 : 개체 참조 또는 ID를 키로 사용 하시겠습니까?
- 26. 정수 배열을 unordered_map의 키로 사용하는 방법
- 27. unordered_set에서 문자열 *을 키로 사용
- 28. 배열을 여러 개의 키로 정렬
- 29. int 배열을 자바에서 키로 사용하는 Hashtable
- 30. 오브젝트를 일반 사전 키로 사용
얼마 전에 거의 동일한 문제가 발생하여 포기했습니다. 원시 배열의 해싱 동작을 변경할 수 있다고는 생각하지 않습니다. 이 경우, 새로운'SerializableTuple' 클래스를 소개 할 수 있습니다. – Gene