目录
-----第一章
----------为什么要深入学习HashMap?
----------HashMap与HashTable的区别是什么?
----------自定义HashMap中的Entry<K,V>类
----------使用ArrayList集合实现简易版HashMap
----------使用LinkedList链表实现简易版HashMap
----------HashCode和equals的区别
----------如何解决HashCode碰撞问题
----------纯手写HashMap中的put方法
----------纯手写HashMap中的get方法
-----第二章
----------HashSet基本API使用介绍
----------HashSet底层原理分析
----------HashMap底层基本实现原理分析
----------HashMap构造函数实现原理分析
----------HashMap第一次数组扩容原理
----------HashMapPut方法源码分析
-----第三章
----------HashMapJDK1.7面试题总结
----------HashMapJDK1.7扩容死循环原理分析
----------HashMapJDK1.8什么要使用红黑树
----------数据结构中时间复杂度对比
----------二叉搜索树基本实现原理与思想
----------手写二叉搜索树添加功能
----------手写二叉搜索树查询功能
----------总结二叉搜索查询存在哪些问题
-----第四章
----------二叉搜索树存在那些问题
----------红黑树的数据结构基本介绍
----------红黑树基本的特征介绍
----------红黑树变换颜色的规则要求
----------红黑树左右旋转基本的规则
----------手写红黑树环境代码实现
----------手写红黑树实现二叉树
----------红黑树规则破坏如何实现修复
-----第五章
----------手写红黑树左旋转代码演示
----------红黑树基本变色旋转规则回顾
----------纯手写一步一步写左旋转
----------红黑树基本左旋变颜色01
----------红黑树基本左旋变颜色02
----------红黑树基本左旋变颜色03
----------红黑树基本左旋变颜色04
----------红黑树查询左大值与最小值
-----第六章
----------HashMap8基本实现原理分析
----------HashMap8优化了7那些bug
----------HashMap8的Put方法实现原理01
----------HashMap8的Put方法实现原理02
----------HashMap8的Put方法扩容实现
----------HashMap8的Put方法源码分析总结
使用AaaryList集合实现HashMap
第一步:在HashMap中创建一个AaaryList集合来存放Entry<K,V>对象
private List<Entry> list = new ArrayList<Entry>();
第二步:重写put方法
public v put(K key, V value) {
Entry entry = new Entry(key, value);
list.add(entry);
return value;
}
第三步:重写get方法
public V get(K key) {
for (Entry entry : list) {
if (entry.getKey().equals(key)) {
return (V) entry.getValue();
}
}
return null;
}
这时HashMap如下
public class MyHashMap<K, V> implements MyMap<K, V> {
private List<Entry> list = new ArrayList<Entry>();
public v put(K key, V value) {
Entry entry = new Entry(key, value);
list.add(entry);
return value;
}
public V get(K key) {
for (Entry entry : list) {
if (entry.getKey().equals(key)) {
return (V) entry.getValue();
}
}
return null;
}
static class Entry<K, V> implements MyMap.Entry<K, V> {
private K k;
private V v;
public Entry(K k, V v) {
this.k = k;
this.v = v;
}
public K getKey() {
return this.k;
}
public V getValue() {
return this.v;
}
}
}
这样用ArrayList就实现了一个简单的HashMap了,这样有什么缺点吗?
1、get方法查询效率低,时间复杂度为O(n)
2、Key相同时不会覆盖,会造成存在多个Key相同的Entry对象