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();
	}
}

좋은 웹페이지 즐겨찾기