1.前言
一言以蔽之,底层是数组加单向链表,链表的数组,在了解hashMap以前,先了解常用的数组和链表底层原理
1.1 ArrayList :
底层是数组,数组属于顺序存储,内存空间连续根据下标随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组元素。顺序存储可以想象成吃饭排队,每个人领的号都是按顺序来的,服务员只要喊号就里立即可以找到对应的人,新来的人都自动加到队尾,如果有人想插队,那么从他插队的位置后面所有的人都要挪动位置;查询速度快。
1.2 LinkedList:
底层是双向链表,内存空间不连续, 每个元素都有一个前指针和后指针,linledList在获取任何一个数据的时候,都要把前面的数据或后面的数据都遍历一遍;插入和删除某个元素的时候,直接移动指针就行;插入、删除速度快。
2.HashMap:
HashMap底层使用数组加(链表或红黑树)的结构完美的解决了数组和链表的问题,使得查询和插入,删除的效率都很高。
2.1 HashMap的put方法
HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,HashMap的基础就是一个线性数组。hashmap在存数据的时候是基于hashing的原