- 博客(5)
- 收藏
- 关注
原创 LinkedList详解
Linked + List = 链表 + 列表 = LinkedList = 链表列表与ArrayList不同,LinkedList初始化不需要创建数组,因为它是一个链表结构。而且也没有传给构造函数初始化多少个空间的入参,例如这样是不可以的,如下;但是,构造函数一样提供了和ArrayList一些相同的方式,来初始化入参,如下这四种方式; LinkedList的插入方法比较多,List中接口中默认提供的是add,也可以指定位置插入。但在LinkedList中还提供了头插addFirst和尾插addLas
2022-06-17 21:50:36
1011
原创 ArrayList详解
Array + List = 数组 + 列表 = ArrayList = 数组列表方式二:内部类方式 (这种方式也比较常用,而且省去了多余的代码量)方式三:Arrays.asList构造函数源码分析通过构造函数可以看到,只要实现 Collection 类的都可以作为入参。 在通过转为数组以及拷贝Arrays.copyOf 到 Object[] 集合中在赋值给属性elementData 。注意:c.toArray might (incorrectly) not return
2022-06-17 17:28:06
748
原创 红黑树学习
2-3数是红黑树的前身,首先 2-3 树(读法:二三树)就是一个节点有 1 个或者 2 个元素,而实际上 2-3 树转红黑树是由概念模型 2-3-4 树转换而来的。-4 叉就是一个节点里有 3 个元素, 这在 2-3 树中会被调整,但是在概念模型中是会被保留的。 虽然 2-3-4 树也是具备 2-3 树同样的平衡树的特性,但是如果直接把这样的模型用代码实现就会很麻烦,且效率不高,这里的复杂点包括;1. 2-叉、3-叉、4-叉,三种结构的节点类型,互相转换复杂度较高2. 3-叉、4-叉,节点在数据比较上需要进
2022-06-15 23:35:00
196
原创 2-3树学习
使用树结构就是为了有效降低时间复杂度,提升整体效率:插入、删除、查找(索引),尤其是索引操作。一个平衡树的索引时间复杂度是O(logn),而数组的索引时间复杂度是O(n)。在树的数据结构中,最先有点是二叉查找树,也就是英文缩写BST树。在使用数据插入的过程中,理想情况下它是一个平衡的二叉树,但实际上可能会出现二叉树都一边倒,让二叉树像列表一样的数据结构。从而树形结构的时间复杂度也从O(logn)升级到O(n),如下图;二叉搜索树的数据插入过程是,插入节点与当前树节点做对比,小于在左,大于在右综上呢,如果我们
2022-06-14 21:39:06
159
原创 HashMap源码分析
在HashMap存放元素时候有这样一段代码来处理哈希值,这是java 8的散列值扰动函数,用于优化散列效果; 理论上来说字符串的hashCode是一个int类型值,那可以直接作为数组下标了,且不会出现碰撞。但是这个hashCode的取值范围是[-2147483648, 2147483647],有将近40亿的长度,谁也不能把数组初始化的这么大,内存也是放不下的。默认初始化的Map大小是16个长度 DEFAULT_INITIAL_CAPACITY = 1 ...
2022-06-13 22:56:38
435
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人