- 博客(6)
- 收藏
- 关注
原创 从源码看LinkedHashMap
文章目录前言源码Entry结点类和部分属性put操作get操作containsValue操作总结 前言 在阅读这篇文章之前,我们应该已经了解了 HashMap 的底层实现。 HashMap 是一个存储键值对的集合,jdk1.8 中底层的数据结构有数组+链表+红黑树,对于 get 、 put 操作,时间复杂度是O(1)的,是不是很优秀? 但是, HashMap 插入元素之后,对它进行遍历,遍历的结点顺序是无序的,如果我们希望遍历的顺序是可预测的呢?这时, LinkedHashMap 闪亮登场! 从 L
2020-06-01 19:51:39 151
原创 单例模式
文章目录简介要点分类饿汉式懒汉式1.简单的实现2.考虑多线程3.双重检查锁定4.防止指令重排序5.基于类初始化实现懒汉式 简介 保证系统中只能存在某个类的一个实例。 要点 一个类只能有一个实例。 需要定义一个该类的静态私有变量,使这个类的所有对象都共用这个实例。 实例必须由类自行创建。 单例模式的类只能提供私有的构造函数。如此,才能保证外部无法实例化这个类的对象。 必须提供获取实例的方法。 单例模式的类必须提供一个公共的静态函数用于创建或获取它本身的静态私有对象。 分类 饿汉式
2020-05-20 23:10:27 80
原创 HashMap(二)
文章目录内部红黑树结点类属性内部方法左旋右旋插入后平衡操作树的分裂将链表转换为树将树转换为链表红黑树插入链表树形化参考 这篇文章主要关注HashMap中有关红黑树的相关操作。 内部红黑树结点类 属性 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> { TreeNode<K,V> parent; // 指向父结点的指针 red-black tree
2020-05-17 10:30:09 193
原创 HashMap(一)
文章目录属性构造函数1. 带初始容量和加载因子的构造器2.其它构造器hash函数(扰动函数)put操作get操作resize操作1.调用resize的两种情况2. resize方法的逻辑3.resize处理链表部分源码 这篇文章主要关注的是jdk1.8中HashMap的实现。 HashMap是一个存储键值对的集合,它是线程不安全的,允许键值是null,底层的数据结构有数组+链表+红黑树。 属性 静态属性 //序列化版本UID private static final long ser
2020-05-17 10:28:56 231
原创 ArrayList
文章目录类图属性构造方法1.带初始容量的构造方法2.无参构造方法3.带一个集合参数的构造方法插入方法1.在尾部添加一个元素2.在指定位置添加元素3.添加元素用到的私有方法扩容方法删除方法1.删除指定下标的元素2.删除指定元素3.删除元素用到的私有方法查找方法1.查找指定元素的位置2.查找指定位置的元素序列化方法1.序列化2.反序列化克隆方法迭代器1.创建迭代器方法2.Itr类的属性3.Itr类的next方法和hasNext方法4.Itr类的remove方法 类图 实现了RandomAccess接口,可以
2020-05-17 10:26:06 211
原创 排序(1)
选择排序 o(n^2) //从后面所有的值中每次选出最小值 for(int i = 0;i < n;i++){ int min = i; for(int j = i+1;j < n;j++){ if(a[j] < a[min]) min = j; swap(a[i],a[min]); }...
2019-02-02 11:16:15 108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人