- 博客(14)
- 收藏
- 关注
原创 HashMap底层源码分析
HashMap 的数据存储结构是一个 Node 数组+单向链表+红黑树,在(Java 7 中是 Entry 数组+单项链表,但结构相同)如果发现有 next 节点的 key 和要加入的 key 一样,对应的值替换为新值。1.如果 next 节点为空,把要加入的值和 key 加入 next 节点。因为容量总是2的次方,所以-1的值的二进制总是全1。2.如果坐标上的元素是红黑树,把要加入的值和 key 加入到红黑树。1.如果坐标上的元素值和要加入的值 key 完全一样,覆盖原有值。
2024-07-21 19:11:24
105
原创 HashMap常见问题
HashMap 基于哈希表的数据结构实现,允许存储键值对,并且通过键快速访问对应的值。它内部使用数组和链表(在 Java 8 及以后还可以使用红黑树)来存储元素,每个数组槽位(bucket)对应一个链表或红黑树。数组内的元素保存了 key 和 value。当要塞入一个键值对的时候,会根据一个 hash 算法计算 key 的hash 值,然后通过数组大小n-1& hash 值之后得到一个数组的下标,然后往那个位置塞入这键值对。
2024-07-21 19:01:42
253
原创 LinkedList源码解析
所以当你想要使用栈或者队列的时候,可以考虑使用LinkedList(Java官方已经声明不建议使用Stack类,甚至Java里面根本就没有队列Queue这个类),但是其实关于栈和队列现在首选还是ArrayDeque,当作栈和队列使用时,ArrayDeque比LinkedList性能更好。同时实现了List接口和Deque接口,因此它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)如果 succ 的前驱不为空,则将 succ 前驱的后继引用指向新节点。
2024-07-15 08:57:46
230
原创 ArrayList扩容机制
增长因子:每次扩容时,ArrayList会根据增长因子来计算新的容量。默认情况下,增长因子为1.5,即每次扩容后容量变为原来的1.5倍。扩容策略:ArrayList在扩容时,会创建一个新的更大容量的数组,并将原有元素复制到新数组中。扩容触发条件:当ArrayList的size超过当前容量时,就会触发扩容操作。初始容量:创建ArrayList对象时,会分配一个初始容量,默认为10。扩容时,根据增长因子计算新的容量,并创建一个新的数组。存储,适用于频繁的查找工作,线程不安全。将原有数组中的元素复制到新数组中。
2024-07-15 08:53:43
311
原创 StringBulider和StringBuffer的底层源码剖析
要深入了解 StringBuffer 和 StringBuilder 的区别,从底层源码的角度来解析,包括它们的创建、扩容机制等,可以参考 JDK 1.8 的源码。StringBuilder 和 StringBuffer 都继承自 AbstractStringBuilder,并共享其核心实现,包括初始容量和扩容机制。扩容机制:扩容策略是原数组长度的两倍加2,当容量不足时扩容,并通过 Arrays.copyOf 方法复制原数组内容。如果新容量小于所需的最小容量,则将新容量设置为最小容量。
2024-07-07 22:46:03
146
原创 StringBuilder扩容机制解析
1.无参数构造方法:创建一个初始容量为16的 StringBuilder 对象。2.指定容量构造方法:创建一个具有指定初始容量的 StringBuilder 对象。3.指定初始内容构造方法:创建一个初始内容为指定字符串且容量为字符串长度加16的 StringBuilder 对象。在进行字符串拼接时,如果当前容量不足,StringBuilder 会通过 ensureCapacityInternal 方法进行扩容。扩容时,新的容量是当前容量的两倍加二,并且保证新容量至少等于所需的最小容量。
2024-07-07 22:37:47
947
原创 SiringBuilder可变字符操作
当对字符串进行操作时,就需要使用StringBuffer和StringBuilder类。而为什么不使用String类?是因为String类在使用的时候,因为它具有不可变性,每次通过new String()创建都会在堆中开辟一片空间,会造成资源的浪费。String底层是被final修饰的char[] valueString类所提供的所有的方法,new String()为了解决这个问题,Java提供了StringBuilder类,是一个可变的字符串操作类,允许我们对字符串进行高效的操作。
2024-07-07 22:28:07
248
原创 数组查找最大值最小值
问题:遍历数组int[] array,找出数组中的最大值和最小值,以及各自的下标。思路:首先设置最大值最小值,以及各自的下标。遍历数组,将数组中的每个元素与最大值/最小值做比较然后输出,得到最大值/最小值和他们各自对应的下标!!!
2024-05-19 10:36:15
279
1
原创 selenium安装谷歌浏览器驱动chromedriver 任意版本
最近学习了selenium库的自动化测试,但是遇到一个棘手的问题,驱动下载不了。
2024-04-01 13:52:07
2235
1
原创 输出倒金字塔
然后后面我们来做倒金字塔的,思路是* (后面有空格)这里我们遵循化繁为简,先死后活的思路。然后我们用scanf将它复杂化。两个for循环来解决问题。
2023-04-27 23:32:18
992
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人