hashmap数据结构(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-25 11:39 点击:次
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
Val是一个char[],存放的是字符串的各个字符;Len是字符串长度;off从0开始;h从0开始。比如一个字符串“abc”(a的ascii码是97),它的hashcode算法是:
h = 31 * 0 + 97 ==> h = 97;
h = 31 * 97 + 98 ==> h = 3105;
h = 31 * 3105 + 99 ==> h = 96354;
所以“abc”的hashCode就是96354
存储方式
列表的存储方式是基于数组,如下图:
链表的存储方式是基于指针,如下图:(单向链表)
HashMap的存储方式是上面两种的结合,如下图:
HashMap的存取
HashMap的功能是通过“键(key)”能够快速的找到“值”。下面我们分析下HashMap存数据的基本流程:
1、 当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode();
2、 再把hash通过一下运算得到一个int h.
hash ^= (hash >>> 20) ^ (hash >>> 12);
Val是一个char[],存放的是字符串的各个字符;Len是字符串长度;off从0开始;h从0开始。比如一个字符串“abc”(a的ascii码是97),它的hashcode算法是:
h = 31 * 0 + 97 ==> h = 97;
h = 31 * 97 + 98 ==> h = 3105;
h = 31 * 3105 + 99 ==> h = 96354;
所以“abc”的hashCode就是96354
存储方式
列表的存储方式是基于数组,如下图:
链表的存储方式是基于指针,如下图:(单向链表)
HashMap的存储方式是上面两种的结合,如下图:
HashMap的存取
HashMap的功能是通过“键(key)”能够快速的找到“值”。下面我们分析下HashMap存数据的基本流程:
1、 当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode();
2、 再把hash通过一下运算得到一个int h.
hash ^= (hash >>> 20) ^ (hash >>> 12);
相关新闻>>
- 发表评论
-
- 最新评论 更多>>