- 博客(9)
- 收藏
- 关注
原创 深入JAVA框架学习23种设计模式-原型模式
快速失败机制的实现是通过在集合的内部维护一个计数器(modCount),每次修改集合时都会增加计数器的值。接下来这段代码是我们今天的重点第一个判断显然是对单例模式bean对象的获取,最主要我们来看第二个,即对原型模式bean对象获取方法,首先将prototypeInstance赋为空值null,定义了一个Object对象prototypeInstance,注意这两个对象并不是一个对象,它们所处的作用域不同即位于不同的{}内的代码块,prototypeInstance在上个代码块中时String[]对象。
2024-07-23 14:45:16 1016
原创 深入JAVA框架学习23种设计模式-单例模式
这个注册表在字符串名字和单例实例间建立映射关系,当需要某个单例实例的时候我们通过定义的单例名来获取该单例实例,上面的例子中,singletonObjects和earlySingletonObjects都是单例注册表,只不过分别注册这两个注册表是为了考虑bean对象之间的依赖关系会导致bean对象无法一次性全部初始化完这个问题,创建单例对象的行为全部交给了singletonFactories对象去做,该对象一但创建成功,便将类名与单例实例之间的映射关系移除,保证该单例对象的全局唯一性。我们画个图来做个总结。
2024-07-20 11:23:06 931
原创 对JAVA的HashMap的深入理解
定义两个int类型变量lc,hc,然后开始遍历这颗红黑树,我们来看一看遍历中的具体操作,首先定义了两个TreeNode变量e,赋值为b即这颗红黑树的根节点,然后定义了一个为初始化的TreeNode变量next,,然后遍历开始,首先赋值next为e的next节点,但我们查看TreeNode的定义发现并没有next的定义,我们可以知道这个是TreeNode的父类定义的,这给我们带来了一个重要的结论重新hash的过程中节点的hash值要么不变,要么加上一个bit位,画一个图来解释一下这个结论的重要意义,
2024-07-18 16:10:52 932 1
原创 对JAVA的TreeMap深入理解
今天我们来分析TreeMap的底层原理,深入了解TreeMap底层是如何实现的。在分析源码之前我们先来分析红黑树这种数据结构,这样我们呢才能看明白TreeMap的底层原理。在讲红黑树之间我们先来讲一下二叉搜索树,因为红黑树就是二叉搜索树的一种形式。二叉搜索树就是该二叉树的每一个节点都大于它左子树的所有节点,小于它所有右子树的节点,画一个图来说明。我们可已发现6大于它所有左子树的节点,小于它所有右子树的节点,且左右子树的节点依旧保持这个性质,这就是二叉搜索树。我们继续来讲红黑树,首先先说明几个
2024-07-17 22:45:24 1189
原创 对JAVA的PriorityQueue的深入理解
发现它是一个接口,更具提供的方法的方法名我们可以知道这是一个定义对象的比较顺序的一个接口这个接口我们今天先不仔细展开,只需知道里面最重要的方法是compare()用来定义两个对象的比较关系。这两个方法几乎相同,唯一的差别就是比较对象顺序使用的方法不同,一个是使用你传入的comparator对象定义的方法来比较对象顺序,一个是使用对象是实现了Compara接口里的comparaTo方法来比较,这两个方法功能是一样的,就是使得我们传入的集合对象变成一个堆。但我们还是继续看完堆剩下的两个构造方法,
2024-07-10 22:07:02 876
原创 对JAVA的ArrayDeque的深入理解
然后在进行initialCapacity++的目的是initialCapacity变为2的幂,但也会带来一个问题假如initialCapacity正好等于int的最大值,会使得initialCapacity变为负数,因为initialCapacity最左边的符号位0变为了1,所以这就是下面为什么要判断initialCapacity<0的原因,如果initialCapacity<0,我们再把initialCapacity右移一位,使得它变成它的绝对值的一半。后面的代码是申请一个新的容量的数组a,
2024-07-09 18:43:59 1226
原创 对JAVA的Vector的深入理解
这个方法是用来判断一个数是否超过了最大整数值的,假如超过了就返回Integer的最大值,否则就返回Max_Array_Size,这让我们知道了无论是Vector还是ArrayList等一系列数组对象是有一个最大容量的,即整数最大值,假如超过了这个数,Java将会抛出一个ArrayIndexOutOfBoundsException异常。我们发现和ArrayList的类似的构造方法几乎完全一致,想要了解原理的同学可以读我上面的链接文章来具体了解这个方法的详细实现原理。我们在分析Vector的最后一个构造方法,
2024-07-08 15:51:46 529
原创 对JAVA的ArrayList深入理解
在将c转化为对象数组a之后,接着判断了a的长度是否为0,并且将ArrayList对象内的数据成员size赋值为a的长度,size代表ArrayList对象当前所含元素的个数,默认值为0,如果为0,即代表传入的集合对象c为一个空集合,处理方法与第二种构造方法类似,即将elementData指向一个EMPTY_ELEMENTDATA的空的对象数组。同样的我们先来分析ArrayList的构造方法,从构造方法入手,我们可以快速的了解ArrayList的底层原理。该方法用于将一个数组中的元素复制到另一个数组中。
2024-07-07 17:21:34 867
原创 对JAVA的LinkedList深入理解
在插入完传入对象数组的所有对象之后,需要将链表再次变成循环列表,具体方法是首先判断了succ是否为空,即判断该链表的插入位置是否为尾部假如是尾部,我们就设置该链表的尾节点为pred,pred即新创建节点的最后一个节点,如果succ不为空,即插入位置不为该链表的尾部,设置插succ的前驱节点为pred,pred的后继节点为pre,将链表从插入位置连接起来再次变成双向循环链表。最后增加链表的元素个数,即增加传入集合元素c的元素个数,使modCount+1,返回true。抽象类中的一个变量,
2024-07-06 18:02:48 351 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人