Java
文章平均质量分 74
Java学习,学无止境~
小呀小蜜蜂
JUST DO IT
展开
-
Java并发编程 使用锁和状态位来控制线程的执行顺序
为了控制线程按序执行,这里有2个关键的认识需要了解下:1.锁:通过锁,来保证线程的执行不受并发和并行的影响。这个是使线程执行顺序可控的基础。2.状态位:通过状态位,起到一个线程通知的作用,从而控制线程的执行顺序。原创 2024-08-03 17:58:06 · 801 阅读 · 0 评论 -
Java 线程池的认识
线程池的作用,总的来说,一是为了减轻CPU的工作负担,二是为了方便对线程资源进行管理。通过线程池,我们可以根据自己的业务场景,即任务执行的特点,去定制化的管理线程资源。通过复用线程,以及控制线程创建的数量,来减轻CPU的负担,从而提高系统的运行性能。原创 2024-07-27 17:01:11 · 829 阅读 · 0 评论 -
Java ArrayList的扩容机制
在calculateCapacity()方法中,会先判断elementData字段是否是初始状态,是的话就会在DEFAULT_CAPACITY字段和本次添加新元素所需的最小容量之间取一个最大值。在进行一系列的计算得到本次扩容的新容量大小后,就会执行java.util.Arrays#copyOf(T[], int)方法将原elementData字段的数据copy给堆中的一个新数组对象中,且这个新数组的容量大小等于本次扩容要求的大小。这个字段是ArrayList类中定义的一个默认的初始数组大小。原创 2023-07-01 20:30:04 · 213 阅读 · 0 评论 -
Java的StringBuffer是如何存放数据的?
在StringBuffer类对象的内部,采用的是一个名为value,类型为char数组的数据结构来存放数据的,并且这个数组被定义在其父类AbstractStringBuilder类中。在向StringBuffer存放数据的过程中,会根据数据的不同类型采用不同的处理方式。原创 2023-06-22 19:04:09 · 238 阅读 · 0 评论 -
Tomcat和SpringMVC交互的流程
Spring程序,实现Web交互的基础,分为2个部分,分别为tomcat和springmvc。其中springmvc实现web交互的关键点是DispatcherServlet。原创 2024-07-18 16:01:16 · 898 阅读 · 0 评论 -
Java HashMap优化Hash冲突的策略
Object类中定义的hashCode():hashCode()方法生成的散列码,默认是对象在内存中的地址。并且由于是int类型,所以可以知道这个散列码是32位的,所以可以表示2^32个不同的值。HashMap中定义哈希表的散列算法是:(n - 1) & hash,相当于n % hash。因为hash有2^32 多种可能,而哈希表的长度可能远小于2^32 位,比如只有2^16位的大小,所以此时的&运算对高16位的计算结果都为0,这就相当于hash高16位的信息被忽略掉了。原创 2024-06-10 10:00:00 · 667 阅读 · 0 评论 -
Java HashMap表的长度为什么是2的倍数?
这个数值串就是Y%X的计算结果。所以,正是由于二进制运算的这种特性,HashMap在put进一个新元素到哈希表时,如果哈希表的长度为2的倍数,那么就可以直接通过(n - 1) & hash得到 n%hash的结果了。由于位运算的执行效率要比%运算高效很多,所以,通过做位运算,而不是%运算,就能够大大提高对哈希表操作的效率了。原创 2023-08-22 17:12:37 · 219 阅读 · 0 评论 -
Java String对象在JVM中的内存位置
用一段代码来举例:为一个String对象赋值一个字符串字面量“test”:在启动项目时,在JVM类加载过程的“加载”阶段,当扫描到字节码文件中的“test”字面量时,JVM会把这个字面量存放在运行时常量池中。然后在“解析”阶段,JVM会根据运行时常量池中的这个字符串字面量,在堆中创建出对应的String类对象,然后再把它的引用值存入到字符串常量池中。原创 2023-07-09 12:55:11 · 1312 阅读 · 2 评论 -
Java ArrayList实例是否可以存放NULL元素?
当add一个新元素时,如果这个元素是一个null元素,那么在这个方法中也并没有做null校验,它内部的处理逻辑就是把这个新元素直接存到elementData字段的最后一个空间中,而数组对存放null元素本身也并没有做限制。当我们调用add()方法添加一个新元素到ArrayList类中,我们看下elementData字段此时会被怎么处理。根据官方解释,可以了解到这个elementData字段就是用来存放存入到ArrayList类对象中的所有元素。原创 2023-06-15 17:04:40 · 616 阅读 · 0 评论 -
Optional类中,of()和ofNullable()方法的用法与区别
of(...)方法会返回一个携带被指定的value,且该value不能为NULL;使用ofNullable(...)方法时,若指定的value不为NULL,则会返回携带有该value的Optional类实例,否则就返回一个value值为NULL的Optional类实例。我们可以通过实验来看看这两者之间的区别。原创 2022-04-26 17:14:03 · 15123 阅读 · 0 评论 -
Optional类的作用和应用场景
我们要养成看官方文档的好习惯,所以先来看看JDK 8官方文档上的解释:从文档中可以看出来,大概的意思就是说Optional是一个基于值的类,它里面会存放一个为NULL或不为NULL的值,也就是value,然后这个类里面的API都是围绕着这个值而被开发的。原创 2022-04-26 16:00:24 · 1867 阅读 · 0 评论 -
探究Collections.singletonList的作用和使用方法
Collections.singletonList被限定只被分配一个内存空间,也就是只能存放一个元素的内容。这样做的好处就是不会造成内存的浪费,不像ArrayList这样的类,不管你是需要多少内存,初始化就会被分配一定空间的内存,就会导致多余内存的浪费。所以在实际的开发中,如果有特殊要求只需要List存放一个的元素,就可以使用Collections.singletonList作为数据结构来存放数据啦。原创 2022-02-25 14:17:28 · 64389 阅读 · 1 评论 -
探究Java ArrayList的add(E e)方法
AarrayList的add()方法每次add新元素其实都是直接把形参对应的引用地址存入到数组中。所以我们在开发的时候就要格外的认识到这一点。因为,当我们调用add方法每次都传入相同引用地址的形参时,就会导致:只要改变List中某个元素的内部内容时,就会导致数组中其它下标的元素的内容也跟着一起被改变,这是因为,此时这个数组中的每个元素,实际上指向的都是堆中同一个对象。原创 2022-02-25 15:51:45 · 2876 阅读 · 2 评论