HashTable에서 동일한 키를 여러 값에 매핑 할 수 있음을 읽었습니다. 그것이 바로 충돌입니다. 왜 내 HashTable에서 키 충돌을 허용하지 않습니까?
지금 나는이 같은 프로그램을 실행 :Dictionary<String,String> hTable = new Hashtable<String,String>();
hTable.put("a", "aa");
hTable.put("a", "ab");
System.out.println(""+hTable.get("a"));
나의 생각은 내가 aa
및 ab
을 받아야했다.
그러나 실제 출력은 왜 그렇게이다 ab
입니까? 그러면 충돌은 어디에 있습니까?
충돌은 내부 구현 세부 사항이며 동일한 키가 여러 번 사용되는 경우가 아니라 두 키가 같은 방식으로 해시 될 때 수행해야합니다. @Mehrdad가 지적했듯이, 그들은 당신을 위해 투명하게 해결됩니다 (모듈로 성능 저하). 일치하지 않는다면 하나의 키에 대해 여러 개의 값을 나타내지 않고 다른 키로 겹쳐 쓰여지는 일부 키 (같은 테이블 셀에 해시 된 것)가 표시됩니다. –
@Lauenece : 1) 두 개의 키가 동일한 방식으로 해시 될 때해야하는 작업 2) 단일 키에 대해 여러 값을 표시하지 않는 동작이 있지만 다른 키로 신비하게 덮어 쓰게되는 키 . 그것에 대해 좀 더 설명해주십시오. – user900721
나는 코멘트의 공간에서 그것을 더 명확하게 설명 할 수 없다. 좋은 알고리즘 책 또는 해설 표에 대한 해시 테이블을 읽으십시오 (http://en.wikipedia.org/wiki/Hash_table). 이들은 구현 세부 사항입니다. 'Hashtable' 클래스를 * 사용하고 싶다면이 세부 사항을 알 필요가 없습니다. 단지 인터페이스/계약을 이해하십시오. 'Hashtable'은'Dictionary'를 확장하여'Dictionary'의 계약을 따르고'Dictionary'의 문서는 "어느 하나의'Dictionary 객체에서 모든 키는 하나의 값과 관련이 있습니다"라고 말합니다. –