답변:
Set
대체되지 않습니다 put()
.
Set
한다는 것을 깨달았습니다 put()
. 이 경우 키와 함께 다시 같은 값을 사용합니다. 이는 키가 있는지 확인하고 넣는 것보다 낫거나 그렇지 않을 수 있습니다. 어느 쪽이든, 나는 그것이 어떻게 작동하는지 이해합니다.
HashSet
형태로 구현 되는 효과라고 생각한다 HashMap
. 수업의 개발자가 아니라면 알기가 어렵습니다.
가장 먼저 알아야 할 것은 HashSet
a처럼 작동 Set
한다는 것입니다. 즉, 객체를에 직접 추가 HashSet
하고 복제본을 포함 할 수 없습니다. 에 직접 값을 추가하면됩니다 HashSet
.
그러나 HashMap
A는 Map
유형. 즉, 항목을 추가 할 때마다 키-값 쌍이 추가됩니다.
에서 HashMap
중복 값을 가지고 있지만, 키를 복제 할 수 없습니다. 에서 HashMap
새 항목 이전을 대체합니다. 가장 최근 항목은에 있습니다 HashMap
.
HashMap과 HashSet 간의 링크 이해 :
기억 HashMap
중복 키를 가질 수 없습니다. 무대 뒤에서을 HashSet
사용합니다 HashMap
.
에 객체를 추가하려고 할 HashSet
때이 항목은 실제로 장면 뒤에 사용되는 HashMap
것과 동일한 키로 저장됩니다 . 이 기본 에는 키-값 쌍이 필요하기 때문에 더미 값이 생성됩니다.HashMap
HashSet
HashMap
이제 동일한 객체에 다른 복제 객체를 삽입하려고 할 때 HashSet
다시 HashMap
누워서 키로 삽입하려고 시도합니다 . 그러나 HashMap
중복은 지원하지 않습니다. 따라서 HashSet
해당 유형의 값은 하나만 유지됩니다. 참고로, 모든 중복 키에 대해 HashSet에 입력 한 값이 임의의 / 임의의 값이므로 키가 전혀 바뀌지 않습니다. 키를 제거하고 동일한 키 (더미 값이 동일)를 다시 추가하는 것은 전혀 의미가 없으므로 무시됩니다.
요약:
HashMap
중복은 허용 values
하지만 허용 하지는 않습니다 keys
.
HashSet
중복을 포함 할 수 없습니다.
오브젝트의 추가가 성공적으로 완료되었는지 여부와 함께 재생하거나하지 않으려면, 당신은 확인할 수 있습니다 boolean
당신이 호출 할 때 반환 된 값 .add()
과 반환하는지 true
또는 false
. 반환 된 경우 true
삽입 된 것입니다.
HashMap allows duplicate values
HashMap은 이전 값을 새 값으로 바꿉니다.
문서는 이 꽤 명확하다 : HashSet.add
하지 않는 대체 :
지정된 요소가 아직 없으면이 세트에 추가합니다. 보다 공식적으로,이 세트에 요소 e2가 포함되어 있지 않으면 (e == null? e2 == null : e.equals (e2)) 지정된 요소 e를이 세트에 추가합니다. 이 세트에 이미 요소가 포함되어 있으면 호출은 세트를 변경하지 않고 false를 리턴합니다.
그러나 다음 을 대체합니다.HashMap.put
맵에 이전에 키에 대한 맵핑이 포함 된 경우 이전 값이 대체됩니다.
HashSet의 경우이를 대체하지 않습니다.
문서에서 :
http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html#add(E )
"지정된 요소가없는 경우이 세트에 지정된 요소를 추가합니다.보다 공식적으로,이 세트에 요소 e2가없는 경우 지정된 세트 e를이 세트에 추가합니다 (e == null? e2 == null : e.equals ( 이 세트에 이미 요소가 포함되어 있으면 호출은 세트를 변경하지 않고 false를 리턴합니다. "
HashSet이 HashMap에 의해 백업되므로 먼저 해시 맵에서 put 메소드를 확인해야합니다.
HashMap
기본적으로 포함되어 Entry
연속적으로 포함하는 Key(Object)
과 Value(Object)
.Internally가 HashSet
있습니다 HashMap
및 HashMap
이미 일부와 같은 값을 대체 할 pointed..but 정말 키 ??? 아니 대체 .. 그리고 그 여기에 트릭 않습니다. HashMap
기본 값을 키로 유지하고 값 HashMap
은 더미 객체입니다. 따라서 HashMap (기본 맵의 키)에 동일한 값을 다시 삽입하려고하면 키 (값은 HashSet)가 아닌 더미 값을 대체합니다.
HashSet 클래스에 대한 아래 코드를보십시오.
public boolean [More ...] add(E e) {
return map.put(e, PRESENT)==null;
}
여기서 e는 HashSet의 값이지만 기본 map.and의 키는 대체되지 않습니다. 혼란을 해결할 수 있기를 바랍니다.
HashMap
(가) 있는지 확인하기 위해key
이미 호출하기 전에 존재put
후원에map
?