자바 해시 테이블 예제

    이렇게 하면 지정된 매핑이 있는 해시테이블을 구성합니다. 모든 Java 개체는 int 값을 반환하는 hashCode() 메서드를 상속합니다. 이 값은 개체의 내부 메모리 주소에서 계산됩니다. 기본적으로 hashCode()는 고유 개체에 대해 고유 정수를 반환합니다. Hashtable 인스턴스에는 성능에 영향을 주는 두 가지 매개 변수인 초기 용량 및 로드 팩터가 있습니다. 용량은 해시 테이블의 버킷 수이며 초기 용량은 해시 테이블을 만들 때의 용량일 뿐입니다. 해시 테이블이 열려 있습니다: „해시 충돌“의 경우 단일 버킷은 여러 항목을 저장하며 순차적으로 검색해야 합니다. 로드 계수는 용량이 자동으로 증가하기 전에 해시 테이블이 얼마나 가득 차있는지를 측정한 값입니다. 초기 용량 및 하중 계수 매개 변수는 구현에 대한 힌트일 뿐입니다. rehash 메서드가 호출되는 시기와 여부에 대한 정확한 세부 정보는 구현에 따라 다릅니다. 따라서 해시 테이블(또는 해시맵)이 의미가 있습니다. 단어는 고유해야 하므로 해시 테이블의 키가 됩니다. 반면에 정의는 값이 됩니다.

    해시 테이블에서뿐만 아니라 키 값으로 String을 사용하는 것을 선호하는 이유는 무엇입니까? 초기 용량은 낭비되는 공간과 시간이 많이 소요되는 재해시 작업의 필요성 사이의 절충을 제어합니다. 초기 용량이 Hashtable에 포함되는 최대 항목 수를 로드 계수로 나눈 경우 다시 해시 작업이 발생하지 않습니다. 그러나 초기 용량을 너무 높게 설정하면 공간을 낭비할 수 있습니다. 해시맵과 마찬가지로 해시테이블은 해시 테이블에 키/값 쌍을 저장합니다. Hashtable을 사용할 때 키로 사용되는 개체와 해당 키에 연결할 값을 지정합니다. 그런 다음 키가 해시되고 결과 해시 코드가 테이블 내에 값이 저장되는 인덱스로 사용됩니다. 따라서 충돌 횟수를 줄이는 것이 중요합니다. 배열이 클수록 충돌 가능성이 작아지다.

    로드 계수는 배열 크기와 성능 간의 균형을 결정합니다. 기본적으로 0.75로 버킷의 75%가 비어 있지 않을 때 배열 크기가 두 배가 됩니다. 이 작업은 rehash() 메서드에 의해 실행됩니다. 성능 현명한 HashMap은 get(), put(), contains() 등과 같은 가장 일반적인 작업에 대해 해시테이블에서 O(n)와 비교하여 O(log(n)에서 수행됩니다. 해시 테이블 클래스의 메서드는 HashMap과 매우 유사합니다. 보세요. 해시 테이블이 비어 있으면 true를 반환합니다. 키가 하나 이상 포함되어 있으면 false를 반환합니다. 12) 부울 은 Value(개체 값)를 포함합니다: 지정된 개체가 이 해시 테이블의 값인지 테스트합니다. 값과 동일한 값이 해시 테이블 내에 있는 경우 true를 반환합니다. 값을 찾을 수 없는 경우 false를 반환합니다.

    해시 테이블 클래스를 인스턴스화하는 해시 테이블의 기본 생성자입니다. 두 번째 인수 인 1은 키가 아직 테이블에 없는 경우 키에 매핑되는 값입니다. 키가 이미 테이블에 있는 경우 이전 값+1로 계산합니다. 또한 문자열, 정수, 긴 또는 다른 래퍼 유형의 키에는 신경 쓰지 않습니다. equal() 및 해시Code() 메서드는 래퍼 클래스에서 이미 재정의됩니다. Java 8은 코드를 더 깨끗하게 만드는 데 도움이되는 새로운 방법을 도입했습니다. 특히, 우리는 블록 경우 일부를 제거 할 수 있습니다. 이것을 보여 드리겠습니다. 11) 부울은 키 (개체 키)를 포함 : 지정된 개체가이 해시 테이블의 키인지 테스트합니다. 동시수정예외는 버그를 찾아 예측할 수 없는 동작을 방지하는 데 도움이 됩니다. 마지막으로, 우리는 해시 테이블의 속성과 자바 8 특정 API에 대해 이야기했습니다.

    해시 테이블에 개체를 넣으면 다른 개체(equals() 메서드)가 동일한 해시코드를 가질 수 있습니다.