HashMap原理初探
HashMap原理初探 HashMap HashMap的底层是由数组+链表组成的,但JDK1.7和1.8的实现方式有所不同: JDK 1.7 JDK 1.7的HashMap数据结构如下: JDK 1.7的源码如下(图片源自HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你! - crossoverJie’s Blog): 下面逐个解释每个属性的含义: 初始化桶的大小为16(不过官方推荐开发者在创建HashMap时手动指定容量) 桶容量的最大值为2^30 默认负载因子为0.75(影响扩容机制) Entry数组,用于存放数据 Map中元素的数量 桶大小,在HashMap初始化时显示指定 负载因子,在HashMap初始化时显示指定 那么Entry的底层结构又是什么呢? 不难看出,Entry的属性含义: key:写入的真实的键 value:写入的值 next:单向链表指向的下一个对象 hash:哈希值 了解了这些,我们再来看看方法实现: put方法 public V put(K key, V value) { if (tabl...
LinkedList底层分析
LinkedList底层分析 LinkedList是Java集合框架中基于双向链表 实现的List接口,它同时实现了List和Deque接口,既可以作为列表使用,也可以作为双端队列使用。与ArrayList的数组实现不同,LinkedList通过节点间的指针连接实现动态存储。 一、底层数据结构 双向链表结构 从JDK 1.7开始,LinkedList采用双向链表 实现(早期版本使用循环链表),每个节点都包含指向前驱和后继节点的引用。 Node节点定义 private static class Node<E> { E item; // 存储的数据元素 Node<E> next; // 指向下一个节点的引用 Node<E> prev; // 指向上一个节点的引用 Node(Node<E> prev, E element, Node<E> next) { this.item = element; this...
ArrayList和Vector底层初探
ArrayList和Vector底层初探 ArrayList ArrayList 实现于 List、RandomAccess 接口。可以插入空数据,也支持随机访问。 ArrayList有两个重要属性: Object[] : elementData int : size add方法 默认add(E e) : public boolean add(E e) { // 1. 确保容量足够 ensureCapacityInternal(size + 1); // 2. 将元素添加到数组末尾 elementData[size++] = e; return true; } 确保容量足够 -> 将元素添加到数组末尾 -> 尺寸递增 指定下标add(int index, E e) : public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments modCount!! //复制,向后移动 ...



