HashSet
중복 값을 허용하지 않는다는 사실 외에도 HashMap
와 HashSet
? 의 차이점은 무엇 입니까?
나는 현명한 구현을 의미합니까? 둘 다 해시 테이블 을 사용 하여 값을 저장 하기 때문에 약간 모호 합니다.
HashSet
중복 값을 허용하지 않는다는 사실 외에도 HashMap
와 HashSet
? 의 차이점은 무엇 입니까?
나는 현명한 구현을 의미합니까? 둘 다 해시 테이블 을 사용 하여 값을 저장 하기 때문에 약간 모호 합니다.
답변:
그것들은 완전히 다른 구성입니다. 의 HashMap
구현입니다 Map
. 지도 키를 값에 매핑합니다. 키 조회는 해시를 사용하여 발생합니다.
반면에 a HashSet
는의 구현입니다 Set
. 설정은 집합의 수학적 모델에 맞게 설계되었습니다. 언급했듯이 A HashSet
는 HashMap
구현을 지원하기 위해 a 를 사용합니다 . 그러나 완전히 다른 인터페이스를 구현합니다.
Collection
자신의 목적에 가장 적합한 것이 무엇인지 찾고 있다면 이 자습서 는 좋은 출발점입니다. 실제로 무슨 일이 일어나고 있는지 알고 싶다면 그 책 도 있습니다.
HashSet은 집합입니다 (예 : {1,2,3,4,5}).
HashMap은 키-> 값 (키 대 값) 맵입니다 (예 : {a-> 1, b-> 2, c-> 2, d-> 1}).
위의 예제에서 HashMap에는 중복 키가 없어야하지만 중복 값이있을 수 있습니다.
HashSet에는 중복 요소가 없어야합니다.
HashSet이 동기화되지 않았으므로 명시 적으로 동기화하지 않는 한 스레드 안전 작업에 적합하지 않습니다. [유사]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap이 동기화되지 않았으므로 명시 적으로 동기화하지 않는 한 스레드 안전 작업에 적합하지 않습니다. [유사]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
자세한 내용은 이 기사 를 참조하십시오 .
두 이름이 모두 Hash로 시작한다는 것은 정말 부끄러운 일입니다 . 그것은 그들 중 가장 중요한 부분입니다. 중요한 부분은 다른 사람들이 지적했듯이 해시 - 집합 및 지도 뒤에옵니다 . 그것들 각각 은 순서가없는 컬렉션 인 세트 와 맵 이있는 액세스가 가능한 컬렉션 인 세트입니다. 그것들은 이름에서 유래 한 해시로 구현되지만 그들의 본질은 이름의 그 부분 뒤에 숨겨져 있습니다.
그들의 이름으로 혼동하지 마십시오. 그들은 매우 다른 것들입니다.
Hashset
내부적으로 구현 HashMap
. 내부 구현을 보면 HashSet에 삽입 된 값은 HashMap에 키로 저장되며 값은 Object 클래스의 Dummy 객체입니다.
HashMap과 HashSet의 차이점은 다음과 같습니다.
HashMap
키 값 쌍을 포함하며 get 메소드가 없으므로 매번 HashSet을 반복해야하므로 키로 각 값에 액세스 할 수 있습니다.HashMap
Map 인터페이스를 구현하고 하나의 null 값을 키로 허용하고 여러 null 값을 값으로 허용합니다 .Set HashSet
인터페이스 를 구현하는 경우 하나의 null 값만 허용하고 중복 된 값은 허용하지 않습니다. HashSet은 HashMap을 내부적으로 구현합니다. HashSet
그리고 HashMap
반복하면서 삽입의 순서를 유지하지 않습니다.이름에서 알 수 있듯이 HashMap 은 연관 맵 (키에서 값으로 매핑)이며 HashSet 은 Set 입니다.
Java에서 HashSet과 HashMap의 차이점
1) HashMap과 HashSet의 가장 중요한 차이점은 HashMap은 Map 인터페이스의 구현이고 HashSet은 Set 인터페이스의 구현입니다. 즉, HashMap은 주요 값 기반 데이터 구조이며 HashSet은 중복을 허용하지 않음으로써 고유성을 보장합니다. 현실 HashSet은 Java에서 HashMap을 감싸는 래퍼입니다. HashSet.java의 add (E e) 메소드 코드를 보면 다음 코드가 표시됩니다.
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
여기서 오브젝트를 키와 값으로 맵에 넣는 것은 더미 인 최종 오브젝트 PRESENT입니다.
2) HashMap과 HashSet의 두 번째 차이점은 add () 메서드를 사용하여 요소를 Set에 넣지 만 put () 메서드를 사용하여 키와 값을 Java의 HashMap에 삽입한다는 것입니다.
3) HashSet은 하나의 null 키만 허용하지만 HashMap은 하나의 null 키 + 다중 null 값을 허용 할 수 있습니다.
그것은 자바에서 HashSet과 HashMap의 차이점에 있습니다. 요약하자면, HashSet과 HashMap은 하나는 Set이고 다른 하나는 Map입니다.
Java에서 HashSet과 HashMap의 차이점
HashSet은 내부적으로 HashMap을 사용하여 객체를 저장합니다. add (String) 메소드가 호출되면 HahsMap put (key, value) 메소드를 호출합니다. 여기서 key = String object & value = new Object (Dummy)입니다. 목적.
Hashset / HashMap에서 키로 저장된 객체는 해시 코드를 무시하고 계약과 동일해야합니다.
HashMap에서 값 개체에 액세스 / 저장하는 데 사용되는 키는 수정 될 때 Value 개체를 찾을 수없고 null을 반환하므로 Final로 선언해야합니다.
차이점 : 계층 구조와 관련하여 : HashSet은 Set을 구현합니다. HashMap은 Map을 구현하고 키와 값의 매핑을 저장합니다.
데이터베이스와 관련하여 HashSet 및 HashMap을 사용하면 각각의 중요성을 이해하는 데 도움이됩니다.
HashSet : 일반적으로 고유 한 컬렉션 개체를 저장하는 데 사용됩니다. 예 :
(Item이 많은 입찰
을 가짐 ) HashMap : 키를 값에 매핑하는 데 사용됩니다. 값이 null이거나 모든 Object 일 수 있습니다. / 객체의 목록입니다 (자체 자체입니다).
HashSet은 HashMap을 내부적으로 사용하여 항목을 저장합니다. 내부 HashMap의 각 항목에는 단일 Object가 지정되므로 모든 항목이 동일한 버킷으로 해시됩니다. 내부 HashMap이 값을 저장하는 데 사용하는 것을 기억하지는 않지만 내부 컨테이너에 중복 값이 포함되지 않으므로 실제로 중요하지 않습니다.
편집 : 매튜의 의견을 해결하기 위해 그는 맞습니다. 나는 그것을 뒤로했다. 내부 HashMap 에는 Set 요소를 구성하는 Object가 있습니다 . HashMap의 값은 단순히 HashMap 버킷에 저장되는 객체입니다.
HashMap은 Map 인터페이스의 구현입니다. HashSet은 Set Interface의 구현입니다.
HashMap 키 값 쌍의 형태로 데이터를 저장합니다. HashSet 객체 만 저장
Put 메소드는 맵에 요소를 추가하는 데 사용됩니다. Add 메소드는 요소를 추가하는 데 사용됩니다.
해시 맵에서 해시 코드 값은 키 객체를 사용하여 계산됩니다. 여기서 멤버 객체는 두 객체에 대해 동일 할 수있는 해시 코드 값을 계산하는 데 사용되므로 equal () 메서드는 false를 반환하면 동등성을 확인하는 데 사용되므로 두 객체가 다릅니다.
고유 키를 사용하여 개체에 액세스하는 데 HashMap이 더 빠릅니다.