Tag - collection
J.A.R.V.I.S
Life is not just Live
Java古老的集合类之Vector
今天继续来看一下Java中古老的集合类-Vector
变量
1 | //容器存储实体的底层数据结构,Vector也是使用数组来进行存储的 |
从上面的变量可以得知,Vector也是使用数组来进行底层的数据存储,并且还设置了扩容容量。
12月 23 · 4 min
Java古老的集合类之Hashtable
Hashtable虽然现在不经常被用到,但是它作为Java最早的集合类,今天来看一下它的源码。
首先说明一个问题,在Java中大部分都是驼峰式写法,但是Hasbtable并没有采用这种写法。
继承与实现关系
1 | public class Hashtable<K,V> |
可以看出它继承的是Dictionary
与HashMap
并不是同一个父类。但是它也实现了Map
,Cloneable
,Serializable
接口。说明它可以被克隆,可以执行序列化。
变量
1 | private transient Entry<?,?>[] table; |
来一个一个的解释每一个变量的意义:
- table
与HashMap一样,利用数组作为底层的存储容器,并且添加了关键字transient
。这个关键字的意思是在进行序列化的时候不会被序列化。这个关键字具体可以看一下这篇文章。
- count
表示容器中存储的数量
- threshold
扩容阈值,当容器中的数量到达这个值后会进行扩容机制。这个值默认情况下为 (capacity* loadFactor)
- loadFactor
扩容系数,默认为0.75f。
- modCount
修改次数,当增加或删除时,这个值会进行加一。表示这个容器结构修改的次数。这个变量在迭代,序列化等操作、多线程的操作下都尽量保证了安全性。
12月 20 · 11 min
TreeMap源码学习
之前看过了HashMap
,LinkedHashMap
的源码,这次来看一下TreeMap
的源码。
从这个名字就能看出,TreeMap
底层使用的是树来进行存储的。
变量
1 | //比较器,用于左右子树的判断。 |
看一下 root 节点的数据结构:
1 | static final class Entry<K,V> implements Map.Entry<K,V> { |
由于有一个color=BLACK
属性,所以底层数据结构应该是红黑树
11月 12 · 4 min
JAVA容器
8月 31 · 1 min
HashSet源码
8月 26 · 1 min
LinkedHashMap源码
LinkedHashMap
继承了HashMap
类,实现了Map
接口。
他与HashMap
的主要区别就是使用链表存储了每个节点的顺序。这样就能保证有序。
来看一下他的节点情况:
1 | static class Entry<K,V> extends HashMap.Node<K,V> { |
从这里可以看出他使用了两个变量,before
,after
存储这个节点的前后顺序。
8月 22 · 6 min
HashMap源码学习
画了一张结构图,欢迎指正。
变量
1 | /** |
8月 22 · 17 min
LinkedList源码学习
LinkedList
使用了链表实现,相比ArrayList
来说,插入更快,查看较慢。
首先看一下使用的链表结构
1 | private static class Node<E> { |
每个Node
节点存储一个元素,item
表示这个元素的值,prev
表示上一个元素,如果已经的第一个了那么为null
。同理,next
表示的是下一个元素,当插入新元素时会改变上一个元素的next
值指向自己,这样就把这个链表串起来了。
变量
1 | // 元素的数量 |
8月 21 · 11 min
ArrayList源码学习
变量
1 | private static final int DEFAULT_CAPACITY = 10; |
DEFAULT_CAPACITY
:默认的容量,当我们不指定容量时默认容量是10EMPTY_ELEMENTDATA
:空的数据集DEFAULTCAPACITY_EMPTY_ELEMENTDATA
:同上面的一样,都是空的数据集elementData
:保存的元素size
:元素长度,实际存储的元素数量
构造方法:
- 无参的构造方法
1 | public ArrayList() { |
很简单的一句话,将保存元素的变量进行初始化。
8月 20 · 9 min