나는이 프로그램을 실행하면자바 HashMap의 동작은하지 O (1) 마크에 달려있다
public class MyHashMapOperationsDebug {
public static void main(String[] args) {
MyHashMap hashMap = new MyHashMap();//MyHashMap is replica of HashMap
for (int i=1;i<=11;i++)
hashMap.put(i, i+100);
}
}
및 MyHashMap.java
는이
void addEntry(int hash, K key, V value, int bucketIndex) { //replica of HashMap's addEntry method
Entry<K,V> e = table[bucketIndex];
**System.out.println("bucketIndex : " + bucketIndex);**
table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
출력 :
bucketIndex : 7
bucketIndex : 14
bucketIndex : 4
bucketIndex : 13
bucketIndex : 1
bucketIndex : 8
bucketIndex : 2
bucketIndex : 11
bucketIndex : 11
bucketIndex : 2
bucketIndex : 8
일부 키가 이동하는 이유 11 개의 키만 크기 16의 맵에 저장하더라도 동일한 버킷에? 예 : 질문 하나 아래 입력을 읽은 후 : 자바의 HashMap의 & 정수를 사용하는 위의 경우에 복잡 될 것입니다 무엇 인덱스 2에서 양동이, 11는 두 개의 키 각
EDIT 있습니다. 그것은 O (1)입니까?
해시 테이블은 점근 적으로 만 O (1)이며 최악의 경우 O (n) 일 수 있습니다. 병적 최악의 경우는 각 항목이지도의 동일한 색인으로 해시 된 것입니다. – Will
통계라고합니다. – Bohemian
사이드 노트 : 기능의 품질에 따라 크게 좌우됩니다. 정말로 중요하다면, 당신은 hashCode() 메소드를 오버라이드 할 필요가있을 것이다. – allprog