前言
最近学习数据结构,参考数据是《数据结构与算法分析》。现在总结自己的知识点
散列
散列也叫做哈希,根据英语单词hash英译过来。散列相对于数组而言,数据项存储在空间中的位置是根据散列码来决定,而数组则是根据数据项的顺序对应到内存空间。散列解决数组删除、访问、查询需要大量时间的问题,而散列则是固定时间,每次对数据项的获取,删除都通过哈希码来获取对应数据项。
散列函数
在现有的Java API中,散列方法2种,如果数据成员类型是数据,通过位运算得到散列码。
private static int secondaryHash(int h) {
// Spread bits to regularize both segment and index locations,
// using variant of single-word Wang/Jenkins hash.
h += (h << 15) ^ 0xffffcd7d;
h ^= (h >>> 10);
h += (h << 3);
h ^= (h >>> 6);
h += (h << 2) + (h << 14);
return h ^ (h >>> 16);
}
使用位运算来得到hash码的好处是运算简单,减少计数量。而如果是对象,那么根据对象的hash码来进行上面的位运算得到。
另外hash表中的对象最好实现hashcode方法。由于String.java