自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 查找数组中是否存在重复元素

重复元素在数组中成对出现。

2024-05-19 11:07:27 219 1

原创 数组查找最大值最小值

问题:遍历数组int[] array,找出数组中的最大值和最小值,以及各自的下标。思路:首先设置最大值最小值,以及各自的下标。遍历数组,将数组中的每个元素与最大值/最小值做比较然后输出,得到最大值/最小值和他们各自对应的下标!!!

2024-05-19 10:36:15 279 1

原创 更换pycharm镜像源,解决npm install 下载慢问题

pychram的镜像源设置

2024-04-01 14:18:07 269

原创 selenium安装谷歌浏览器驱动chromedriver 任意版本

最近学习了selenium库的自动化测试,但是遇到一个棘手的问题,驱动下载不了。

2024-04-01 13:52:07 2235 1

原创 Idea导入/导出个性化配置

Idea导入/导出个性化配置,当我们使用公司的电脑时,如何快速导入在自己电脑上的个性化设置呢?

2024-03-24 21:38:48 656

原创 坦克大战3.0[多线程版]

wasd控制上下左右,j键发射子弹。

2024-03-24 21:28:54 158

原创 输出倒金字塔

然后后面我们来做倒金字塔的,思路是* (后面有空格)这里我们遵循化繁为简,先死后活的思路。然后我们用scanf将它复杂化。两个for循环来解决问题。

2023-04-27 23:32:18 992 1

坦克大战3.0多线程版

音效文件

2024-03-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除