10: JDK 원본 코드를 통해hashCode와 equals 방법과 집합의 관계 및 작용 분석
1704 단어 HashCode
HashSet 베이스는 HashMap으로 구현
둘.
이HashMap의 키는 HashSet에 넣은 대상이고value는 Object 형식의 대상입니다. 이value는 도대체 무엇인지에 관심이 없습니다.
셋.
HashSet의dd 방법을 호출할 때, 실제로는HashMap에 한 줄 (키-value 쌍) 을 추가합니다.
이 줄의 키는 HashMap에 추가된 대상입니다. 이 줄의value는 Object 형식의 상수입니다
넷.
HashMap 하단에 배열 유지 관리
오.
추가된 대상의hashCode 방법을 호출하여hashCode 값을 얻습니다.
그리고 이 값에 따라 하나의 그룹의 하위 색인을 계산합니다. (그룹의 위치를 계산합니다.)
여섯.
맵에 추가할 대상을 이 위치의 대상과 비교(equals)하는 방법이 같으면 이 위치의 대상(Entry 유형)의value 값을 대체합니다.그렇지 않으면 이 Entry 체인을 따라 상술한 과정을 계속 반복합니다. 체인의 마지막에 이 대상과 같은 대상을 찾지 못하면, 이 때 이 대상을 그룹에 추가한 다음, 그룹의 이 위치에 있는 대상을 이 새 대상의 뒷면으로 연결합니다.
일곱
HashSet,HashMap에 있어서 이렇게 하는 이유는 검색 속도를 높이고 검색 시간이 Set이나 Map의 크기에 따라 바뀌지 않도록 하기 위해서이다.
여덟
Set.add () 중복된 반환false 추가
Map.put () 키와 같은 것을 추가하여 이전value를 덮어씁니다
Set의 특성: 무중복성, 무질서성
public class HashMapTest {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Map map = new HashMap();
map.put("welcome", "abc");
map.put("hello", "abc");
map.put("world", "xyz");
map.put("hello world", "abcxyz");
Set set = map.entrySet();// Set 。
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry me = (Map.Entry) it.next();//
System.out.print(me.getKey() + " ");
System.out.println(me.getValue());
}
Set set2 = map.keySet();// Set 。
for (Iterator it = set2.iterator(); it.hasNext();) {
String key = (String) it.next();
String value = (String) map.get(key);
System.out.println(key + " " + value);
}
@SuppressWarnings("unused")
Set set3 = new HashSet();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EffectiveJava - 모든 객체에 공통적인 메서드equals 방법을 덮어쓰지 않을 때, 클래스의 모든 실례는 그 자체와 같다 예를 들어 Random은 equals 방법을 실현하여 두 Random이 발생하는 무작위 수가 같은지 판단하는데 사용하지만 디자이너는 클라이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.