
Java容器
TreeCode
我喜欢种树
展开
-
LinkedList源码探究之增删查
这篇文章描述LinkedList中add,get和remove这三个方法的底层实现。(JDK1.8) 底层结构 无论如何还是从底层结构说起,LinkedList在1.8改成了双向链表,下面的节点代码很清楚的解释了这一点。 private static class Node<E> { E item;//value Node<E> next;//后继节点 Node<E> prev;//前驱节点原创 2020-08-17 17:07:31 · 103 阅读 · 0 评论 -
HashMap源码探究之构造方法
HashMap构造方法有四种,下面依次说一说(按照源码顺序) 1. 带容量大小和加载因子的构造方法 例如: Map<String,String> map01 = new HashMap<String,String>(5,0.5f); public HashMap(int initialCapacity, float loadFactor) { //1.判断容量是否小于0 if (initialCapacity < 0) throw原创 2020-08-14 00:20:08 · 624 阅读 · 0 评论 -
超级详细的ArrayList底层实现之探究源码
JDK版本1.8.0_201 1.存储方式: 采用数组的方式存储,并且使用了transient关键字(反序列化),目的是节省空间。因为定义数组是有长度的,比如ArrayList初始大小是10,若第一次只存了5个元素,且没有transient关键字修饰的话,会序列化整个数组,而不仅只是有效的5个元素,所以ArrayList使用transient关键字,实现了Serializable接口,并且定义了writeObject()和readObject()方法,实现自定义序列化。 transient Object[原创 2020-08-13 00:53:36 · 152 阅读 · 0 评论 -
HashMap源码探究之put方法(仅包含链化过程)
JDK版本:1.8.0_201 不整花里胡哨的,直接上源码 put方法,先用自定义方法计算hash,然后调用putVal方法: public V put(K key, V value) { //这里要先用HashMap自己定义的方法计算key的哈希值 return putVal(hash(key), key, value, false, true); } 自定义方法计算hash //hashCode是32位,右移16位后与原hashCode进行异或运算,然后返回结果原创 2020-08-14 08:10:41 · 303 阅读 · 0 评论