HashMap数据结构浅谈
开篇语:hashmap作为一种非常重要的数据结构,无论是在理论学习中,还是实际开发中都会经常遇到。这里总结一下对于hashmap一些基础的知识点。
1、常见的数据结构
一般开发中常见的数据结构有数组、链表、树、及HashMap。
数组结构和链表结构的图形结构非常简单。本次主要讲解HashMap的结构,并结合着源码进行简要分析
2、HashMap
HashMap的结构图如下:
主要分为横向的数组和纵向的链表;数组保存的内存中的物理地址,对象的存放索引,纵向的链表保存的是对象的值。
首先看下hashmap的源码,理解下hash存储的过程:
public V put(K key, V value) {
//hash方法是把一个对象散列成一个int值
return putVal(hash(key), key, value, false, true);
}
//这里为了更好的阐述,我假定数组的长度为16,key经过散列后的值为9
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
//Node为定义的一个链表结构
Node<K,V>[] tab;
Node<K,V> p;
int n, i;
//下面这个if这样写会更容易理解
/*
if (table