JDK源码分析
文章平均质量分 64
mao____mao
这个作者很懒,什么都没留下…
展开
-
JDK源码lang包分析——Object源码(1)
Object源码分析Object的概述Object类是Java中所有类的基类,在编译时会自动导入,位于java.lang包中,而Object中具有的属性和行为,是Java语言设计背后的思维体现。Object的方法Object类中的大部分方法都是native方法,用此关键字修饰的方法是Java中的本地方法,一般是用C/C++语言来实现。registerNatives方法//其主要作用是将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。函数的执行是在静态代码块中执行的,在类原创 2022-03-13 23:52:30 · 767 阅读 · 0 评论 -
JDK源码util包分析——Stack源码(15)
Stack源码分析Stack的结构图Stack的概述Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用!我之前已经详细介绍过Vector的数据结构,这里就不再对Stack的数据结构进行说明了。Stack的底层数据结构因为是基于Vector实现,是Vector的原创 2022-03-11 20:59:19 · 769 阅读 · 0 评论 -
JDK源码util包分析——Queue源码(14)
Queue源码解析Queue的结构图Queue的概述Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表插入的一端称为队尾,删除的一端称为对头缺点:出栈复杂度高,容易造成假溢出:可能对头有很多空位置,此时插入放到了队尾,就可能造成溢出,此时叫做假溢出解决办法:循环队列-把头尾相接的循序存储结构称为循环队列(可以解决假溢出) 队列的链式存储及结构模式:队原创 2022-03-11 20:44:13 · 849 阅读 · 0 评论 -
JDK源码util包分析——Vector源码(13)
Vector源码分析Vector的结构图Vector的概述Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。原创 2022-03-11 20:31:21 · 339 阅读 · 0 评论 -
JDK源码util包分析——TreeSet源码(12)
TreeSet源码分析TreeSet的结构图TreeSet的属性 /** * 底层map * 维护一个NavigableMap型变量,NavigableMap是TreeMap的接口 * 序列化时,值被置为null */ private transient NavigableMap<E,Object> m; // PRESENT定义为静态常量,用来填充map的value private static final Obj原创 2022-03-09 20:32:49 · 76 阅读 · 0 评论 -
JDK源码util包分析——TreeMap源码(11)
TreeMap源码分析TreeMap的结构图TreeMap中继承了NavigableMap,而NavigableMap继承了SortedMap,下面来看下这两个之前未见过的类的源码。public interface NavigableMap<K,V> extends SortedMap<K,V> { // 小于给定key的最大节点 Map.Entry<K,V> lowerEntry(K key); // 小于给定key的最大key原创 2022-03-09 20:04:56 · 235 阅读 · 0 评论 -
JDK源码util包分析——LinkedHashSet源码(10)
LinkedHashSet源码分析LinkedHashSet的结构图LinkedHashSet的源码package java.util;// LinkedHashSet继承自HashSetpublic class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final l原创 2022-03-09 14:31:00 · 83 阅读 · 0 评论 -
JDK源码util包分析——LinkedHashMap源码(9)
LinkedHashMap源码分析LinkedHashMap的结构图LinkedHashMap的概述LinkedHashMap 是一个关联数组、哈希表,它是线程不安全的,允许key为null,value为null。LinkedHashMap内部维护了一个双向链表,能保证元素按插入的顺序访问,也能以访问顺序访问。LinkedHashMap可以看成是 LinkedList + HashMap。LinkedHashMap继承HashMap,拥有HashMap的所有特性,并且额外增加了按一定顺序访问的原创 2022-03-08 23:36:50 · 244 阅读 · 0 评论 -
JDK源码util包分析——HashSet源码(8)
HashSet源码分析HashSet的结构图HashSet的概述无序性(存储元素无序)唯一性(允许使用null)本质上,HashSet底层是通过HashMap来保证唯一性HashSet没有提供get()方法,同HashMap一样,因为Set内部是无序的,所以只能通过迭代的方式获得HashSet的参数 // HashSet是通过map(HashMap对象)保存内容的 private transient HashMap<E,Object> map; // 定义一个原创 2022-03-08 12:32:50 · 291 阅读 · 0 评论 -
JDK源码util包分析——Hashtable源码(7)
Hashtable源码分析Hashtable的结构图Hashtable概述HashTable和HashMap类似:1.threshold,loadFactor2.都有扩容机制3.内部都是单链表的数组不同:1.HashTable继承Dictionary2.HashTable里的Capacity不需要2的n次幂3.HashTable里好多方法是synchronized4.HashTable不允许value有 null5.寻找数组下标的hash算法不同,HashMap的算法效率更好些原创 2022-03-07 21:42:53 · 282 阅读 · 0 评论 -
JDK源码util包分析——HashMap源码(6)
HashMap源码分析HashMap的结构图HashMap原理介绍数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复原创 2022-03-03 11:23:37 · 274 阅读 · 0 评论 -
JDK源码util包分析——LinkedList源码(5)
LinkedList源码分析LinkedList的结构图LinkedList的介绍LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作。LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。LinkedList 实现java.i原创 2022-02-25 21:57:58 · 450 阅读 · 0 评论 -
JDK源码util包分析——ArrayList源码(4)
ArrayList源码分析ArrayList的结构图ArrayList的介绍ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。ArrayList 实现了RandmoAcces原创 2022-02-22 00:00:25 · 279 阅读 · 0 评论 -
JDK源码util包分析——AbstractSet源码(3)
AbstractSet源码分析AbstractSet类没有重写任何AbstractCollection类的方法实现,只是增加了对于equals和hashCode的实现AbstractSet的结构图AbstractSet的方法equals()方法:比较set与参数object是否相等,当且仅当参数object类型是set,两个set有相同长度,并且参数set的每个元素都存在于原set中public boolean equals(Object o) { if (o == this)原创 2022-02-21 22:28:22 · 174 阅读 · 0 评论 -
JDK源码util包分析——AbstractMap源码(2)
AbstractMap源码分析AbstractMap的结构图抽象类通常作为一种骨架实现,为各自子类实现公共的方法。Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实现了Map接口部分方法,也就是说为它的子类各种Map提供了公共的方法,没有实现的方法各种Map可能有所不同。AbstractMap的构造器抽象类不能通过new关键字直接创建抽象类的实例,但它可以有构造方法。AbstractMap提供了一个protected修饰的无参构造方法,意味着只有它的子类才能访问(当原创 2022-02-21 21:35:06 · 242 阅读 · 0 评论 -
JDK源码util包分析——AbstractList源码(1)
AbstractList源码分析AbstractList抽象类继承自AbstracCollection,实现了List接口,用于 给List提供了一个骨架实现AbstractList中的参数该参数表示该List被修改的次数,目的是为了控制并发访问。protected transient int modCount = 0;AbstractList中的方法将指定的元素追加到此列表的末尾(该方法是进行数据的添加,添加的过程中 调用了add(index,e)方法,并且这个方法只是在函数体中抛出原创 2022-02-21 19:44:27 · 68 阅读 · 0 评论