OpenJDK's rehashing mechanism

Нашел этот код на http://www.docjar.com/html/api/java/util/HashMap.java.html после поиска реализации HashMap.

  264       static int hash(int h) {
  265           // This function ensures that hashCodes that differ only by
  266           // constant multiples at each bit position have a bounded
  267           // number of collisions (approximately 8 at default load factor).
  268           h ^= (h >>> 20) ^ (h >>> 12);
  269           return h ^ (h >>> 7) ^ (h >>> 4);
  270       }

Может ли кто-нибудь пролить свет на это? Комментарий говорит нам почему этот код здесь, но я хотел бы понять как это улучшает плохое значение хэша и как это гарантирует, что позиции имеют ограниченное количество коллизий. Что означают эти магические числа?

18
задан skaffman 28 October 2011 в 16:56
поделиться