programing

HashSet/HashMap에 중복된 값을 추가하면 이전 값이 대체됩니까?

newsource 2023. 1. 30. 21:59

HashSet/HashMap에 중복된 값을 추가하면 이전 값이 대체됩니까?

다음 코드를 고려해 주십시오.

HashSet hs = new HashSet();
hs.add("hi"); -- (1)
hs.add("hi"); -- (2)

hs.size()을 1로 HashSet는 중복을 허용하지 않으므로 하나의 요소만 저장됩니다.

중복된 요소를 추가하면 이전 요소가 대체되는지 아니면 단순히 추가되지 않는지 알고 싶습니다.

,, 를, 를, 를, 니, 니, 、 까요?HashMap★★★★★★★★★★★★★★★★★?

의 경우 오래된 값을 새 값으로 바꿉니다.

의 경우 항목이 삽입되지 않습니다.

할 은 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.HashSet 피하다Set아, 아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,HashSet중복을 포함할 수 없습니다.를 직접 요.HashSet

★★★★★★★★★★★★★★.HashMap는 입니다.Map 엔트리를 pair.type을 합니다.

»HashMap중복된 값은 가질 수 있지만 중복된 키는 가질 수 없습니다. »HashMap새 엔트리가 이전 엔트리를 대체합니다.는 " "에 .HashMap.

HashMap과 HashSet 사이의 링크에 대해서:

ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.HashMap을 사용하다 뒤에서HashSet는 을 합니다.HashMap.

의 를 에 하려고 할 HashSet '키로HashMap - 똑같아HashMap에서 사용되는 것HashSet이가 되어 있기 HashMap키와 값의 쌍이 필요하기 때문에 더미 값이 생성됩니다.

HashSet 다시 '키로을 시도합니다.HashMap밑에 누워있었어요. ★★★★★★★★★★★★★★.HashMap는 중복을 지원하지 않습니다. 때문에, 「 」는,HashSet는, 그 타입의 값을 1개만 가지는 결과를 낳습니다.를 삭제하고 같은 키를 값이 키를 삭제하고 같은 키를 다시 추가하는 것(더미 값은 동일)은 전혀 의미가 없는 것으로 간주됩니다.

요약:.

HashMap된 「」을 합니다.values 않다.keysHashSet중복을 포함할 수 없습니다.

를 확인하려면 , 「」를 합니다.boolean를 했을 때 되는 값.add() 안 올지 안 올지를 합니다.true ★★★★★★★★★★★★★★★★★」false 이 돌아왔다면true , , , , , , , , , , , , , , , , , , , , , , , , ,,

문서에서는 이 점에 대해 매우 명확합니다.HashSet.add 대체하지 않음:

지정한 요소가 아직 없는 경우 이 세트에 추가합니다.보다 형식적으로, 는 지정된 요소 e를 이 집합에 추가합니다. e==syslog? e2==syslog: e.syslog(e2)와 같은 요소 e2가 포함되지 않은 경우.이 세트에 요소가 이미 포함되어 있는 경우 콜은 세트를 변경하지 않고 false를 반환합니다.

대신 다음 사항이 대체됩니다.

이전에 맵에 키의 매핑이 포함되어 있으면 이전 값이 대체됩니다.

HashSet의 경우 대체되지 않습니다.

문서에서:

http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html#add(E)

"지정된 요소가 아직 없는 경우 이 세트에 추가합니다.보다 형식적으로, 는 지정된 요소 e를 이 집합에 추가합니다. e==syslog? e2==syslog: e.syslog(e2)와 같은 요소 e2가 포함되지 않은 경우.이 세트에 이미 요소가 포함되어 있는 경우 콜은 세트를 변경하지 않고 false를 반환합니다."

틀렸다면 맞혀주세요. 하지만 문자열이 있으면 "Hi" == "Hi"는 반드시 같은 대상이 아니기 때문에 항상 실현되는 것은 아닙니다.

1이라는 답이 나오는 이유는 JVM이 가능한 경우 문자열 개체를 재사용하기 때문입니다.이 경우 JVM은 문자열 오브젝트를 재사용하여 해시맵/해시셋 내의 항목을 덮어씁니다.

그러나 이 동작은 보증되지 않습니다(같은 값 "Hi"를 가진 다른 문자열 개체일 수 있기 때문입니다).이 동작은 JVM의 최적화로 인해 발생합니다.

HashMap으로 「」가 포함되어 있습니다.Entry에 「」, 「」가 표시됩니다.Key(Object) ★★★★★★★★★★★★★★★★★」Value(Object).내부HashSetHashMap ★★★★★★★★★★★★★★★★★」HashMap'키대체할까요?지만 정정 열??아, 、 그그 、 바로바바야 。 HashMap HashMap값은 더미 오브젝트일 뿐입니다.따라서 해시맵에 동일한 값을 다시 삽입하려고 하면(기본 맵의 키).( HashSet ) 。

HashSet 클래스의 다음 코드를 확인합니다.

public boolean  [More ...] add(E e) {

   return map.put(e, PRESENT)==null;
}

여기서 e는 HashSet의 값이지만 기본 map.의 키는 교체되지 않습니다.제가 혼란을 해소할 수 있기를 바랍니다.

HashSet은 HashMap에서 백업되므로 HashMap에서 put 메서드를 먼저 확인해야 합니다.

  1. 중복된 값을 HashSet에 추가할 경우 문자열 "One"을 입력합니다.
  2. 엔트리("one", PRESENT")가 해시맵에 삽입됩니다(세트에 추가된 모든 값에 대해 값은 "PRESENT"가 됩니다).오브젝트 타입의 경우,
  3. Hashmap은 Map에 엔트리를 추가하고 값을 반환합니다.이 경우 "PRESENT" 또는 엔트리가 없는 경우 null입니다.
  4. 해시 집합의 추가 메서드는 해시 맵에서 반환된 값이 null이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.이것은 엔트리가 이미 존재하는 것을 의미합니다.

다르게 말하면:키가 이미 존재하는 HashMap에 key-value-pair를 삽입하면(어떤 의미에서 hashvalue()는 같은 값 und equal()이지만 두 개체는 여러 가지 방식으로 다를 수 있음), 키는 대체되지 않지만 값은 덮어씁니다.키는 hashvalue()를 취득하고 hashvalue()와 함께 테이블 내의 값을 찾는 데 사용됩니다.HashSet은 HashMap의 키를 사용하여 (사용자에게) 실제로 중요하지 않은 임의의 값을 설정하므로 집합의 요소도 대체되지 않습니다.

언급URL : https://stackoverflow.com/questions/12940663/does-adding-a-duplicate-value-to-a-hashset-hashmap-replace-the-previous-value