HashMap 소스 코드 의 비트 연산 자&상세 설명
최근 HashMap 소스 코드 를 읽 을 때 일반적인 연산 자 를 대체 하 는 연산 자가 많은 것 을 발견 했다.예 를 들 어 hash&(table.length-1)로 모드 연산 hash&(table.length)를 대체 합 니 다.확장 후 요소 의 위치 등 을 if(e.hash&oldCap)=0)로 판단 합 니 다.
1.취 모 연산 자%바 텀 원리
총 주지,비트 연산&직접 이 진 연산;한편,취 모 연산 자%:a%b 는 a-a/b*b 에 해당 하고 바 텀 은 실제 적 으로 제법 기 이 며 그 근원 을 따 져 보면 바 텀 의 감법 과 덧셈 이 공동으로 완성 된다.그래서 그 운행 효율 은 비트 연산 자&보다 훨씬 낮다.
2.비트 연산 자&어떻게 모델 링 기능 을 실현 합 니까?
우리 먼저 두 가지 예 를 보 자.
5 & 7 9 & 7
0101----5 1001----9
& &
0111----7 0111----7
= =
0101----5 0001----1
확실히 hash&(table.length-1)는 연산 hash&(table.length)를 2 진법 의 측면 에서 볼 때 5%8 은 실제로 2 진법 5(0101)를 오른쪽으로 3 자리 이동 시 키 고 7(0111)과 연산 을 하 는 것 은 사실상 세 자리 수 를 오른쪽으로 이동 시 키 는 것 이다.그러나 주의해 야 할 것 은 length 의 길이 가 2^n 일 때 만 결론 이 성립 된다 는 것 이다.
3.비트 연산 자&if(e.hash&oldCap)==0)에서 확장 후 요소 의 위 치 를 판단 합 니 다.
이것 은 JDK 1.8 에서 확장 함수 resize()의 한 줄 코드 에서 나 온 것 으로,확장 후 원래 배열 의 요소 가 이동 해 야 하 는 지 를 판단 하 는 데 사용 된다.예 를 들 어:
0001 1010----26 0000 1010----10
& &
0001 0000----16 0001 0000----16
= =
0001 0000----비 0 0000 0000-----0
hash 값 과 oldCap 를 이용 하여 연산 을 하면 결과 가 0 이상 이면 hash 값 이 oldCap 보다 클 때 아래 표 시 된 위 치 는 구 배열 의 아래 표 j+oldCap 로 변 하 는 것 이 분명 합 니 다.결과 가 0 이 oldCap 보다 작 으 면 아래 표 시 된 위 치 는 변 하지 않 습 니 다.JDK 1.7 에서 각 원소 의 해시 값 을 다시 계산 하 는 것 보다 고위 연산(e.hash&oldcap)을 통 해 효율 이 높다.
HashMap 소스 코드 에 있 는 비트 연산 자&상세 한 설명 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.HashMap 소스 코드 에 있 는 비트 연산 자&내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[백준 1411] 비슷한 단어 (JAVA)원본 알파벳이 숌하게 바뀔 경우, 이를 HashMap을 이용해서 쌍으로 묶어준다. HashMap 사용법이 익숙하지 못 해서 어려웠던 문제이다. HashMap 사용법 30분 💬 투포인터 버전 참고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.