해시 가능한 클래스
Hashtable은 맵 인터페이스를 상속하고 키 값 매핑으로 해시 테이블을 구현합니다. 모든 비 널 객체는 키 또는 값으로 사용할 수 있습니다.
put (키, 값)을 사용하여 데이터를 추가하고 Get (키)를 사용하여 데이터를 검색하십시오. 이 두 기본 작업의 시간 간접비는 일정합니다.
Hashtable은 초기 용량 및로드 계수 매개 변수를 통해 성능을 조정합니다. 일반적으로 기본 부하 계수 0.75는 시간과 공간 밸런스를 더 잘 달성 할 수 있습니다. 하중 계수를 늘리면 공간을 절약 할 수 있지만 해당 검색 시간이 증가하여 Get 및 Put과 같은 작업에 영향을 미칩니다.
해시 테이블을 사용하는 간단한 예는 다음과 같습니다. 1, 2 및 3을 해시 테이블에 넣고 키는 각각 "하나", "2", "세 가지"입니다.
Hashtable Numbers = New Hashtable (); 숫자 .put ( "One", New Integer (1)); Numbers.put ( "Two", New Integer (2)); 숫자 .put ( "Three", New Integer (3));
2와 같은 숫자를 꺼내려면 해당 키를 사용하십시오.
정수 n = (정수) numbers.get ( "2"); System.out.println ( "2 =" + n);
키로서의 객체는 해시 함수를 계산하여 해당 값의 위치를 결정하기 때문에 키로 객체는 해시 코드를 구현해야하며 메소드와 동일합니다. 해시 코드 및 메소드와 동일합니다. 루트 클래스 객체에서 상속됩니다. 사용자 정의 클래스를 키로 사용하는 경우 매우 조심하십시오. 해시 함수의 정의에 따르면, 두 객체가 동일하다면, 즉 obj1.equals (obj2) = true 인 경우 해시 코드는 동일해야하지만 두 객체가 다르면 해시 코드가 다를 수 없습니다. 두 개의 다른 물체의 해시 코드가 동일하면,이 현상을 충돌이라고합니다. 충돌은 해시 테이블 작동의 시간 간접비를 증가시킵니다. 따라서 해시 테이블의 작동 속도를 높이기 위해 hashcode () 메소드를 정의하십시오.
동일한 객체에 해시 코드가 다른 경우 해시 테이블의 작업에는 예상치 못한 결과가 나타납니다 (예상 Get 메소드는 NULL을 반환합니다). 이 문제를 피하기 위해 한 가지만 기억하면됩니다. 중 하나를 작성하는 것보다 동일한 방법과 해시 코드 메소드를 다시 작성해야합니다.
Hashtable은 동기화됩니다.
해시 맵 클래스
해시 맵은 해시 테이블과 유사하며, 차이점은 해시 맵이 비동기식이며 널 (예 : null 값 및 널 키)을 허용한다는 것입니다. 그러나 Hashmap이 컬렉션 (값 () 메소드가 컬렉션을 반환 할 수 있음)으로 간주되면 반복적 인 하위 수용 시간 오버 헤드는 해시 맵의 용량에 비례합니다. 따라서 반복 작업의 성능이 매우 중요하다면 해시 맵의 초기화 용량을 너무 높거나 부하 계수가 너무 낮아 지도록 설정하지 마십시오.
요약