迷茫2017-04-17 16:56:09
소스 코드를 확인해보니 여기에 HashSet
의 Hash
에 대한 기사가 있는 것 같습니다.
1. 먼저 요소 추가 과정을 살펴보세요
//HashSet 코드
HashSet
에 의해 내부적으로 관리되는 map
에 새 요소를 추가하세요.
//HashMap 코드
Element
가 해싱되는 것을 볼 수 있는데, Foo(1)
를 추가하면 HashSet에 저장하는 과정에서 꼭 필요하게 됩니다.
이 링크.
비교를 살펴보겠습니다
//HashSet 코드
//HashMap 코드
<프리><코드> /** * 이 지도에 다음에 대한 매핑이 포함되어 있으면 <tt>true</tt>를 반환합니다. * 지정된 키. * * @param key 이 맵에 존재하는지 테스트할 키입니다. * @return <tt>true</tt> 이 지도에 지정된 매핑이 포함된 경우 * 열쇠. */ 공개 부울 containKey(객체 키) { return getEntry(key) != null; } <프리><코드> /** * 지정된 키와 연관된 항목을 반환합니다. * HashMap에 매핑이 없으면 null을 반환합니다. * 열쇠의 경우. */ 최종 항목결론HashSet
컨테이너에 요소를 삽입할 때 요소를 해시하고, 컨테이너에 요소가 포함되어 있는지 판단할 때 요소를 해시합니다. , 요소의 해시 값을 비교합니다.
ringa_lee2017-04-17 16:56:09
equals 메서드이지만 2층에서는 String의 equals 메서드에 대해 이야기하고 있다는 점에 주목할 필요가 있습니다. 왜냐하면 String의 equals 메서드가 다시 작성되었기 때문입니다. 주체가 contain 메서드를 통해 일반 객체를 비교하려는 경우에는 여전히 그렇습니다. 어떤 규칙을 결정하기 위해 String과 같은 equals 메소드를 다시 작성합니다.
PHPz2017-04-17 16:56:09
public boolean contain(Object o) {
Iterator it = iterator();
if (o==null) {
동안(it.hasNext())
if (it.next()==null)
사실을 반환;
} 또 다른 {
동안(it.hasNext())
if (o.equals(it.next()))
사실을 반환;
}
거짓을 반환;
}
이것은 AbstractCollection
의 구현이며, AbstractList
, AbstractSet
은 모두 이것을 상위 클래스로 구현합니다.