Java开发总结(每周持续更新)

文章介绍了Java中的时间处理,如LocalDateTime转换,JSON解析方法,以及Java.util中的Optional特性和ArrayList与LinkedList的区别。讨论了在解决OOM问题时,LinkedList相对于ArrayList的优势。还提到了Java并发处理中的ForkJoinPool及其工作窃取算法,以及在大量数据处理时MyBatis和JDBCTemplate的优缺点。
摘要由CSDN通过智能技术生成
一、java.time
利用类将当前时间转换为对应格式的字符串

String nowTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern(“yyyyMMddHHmmddSSS”));

二、java.json
将包含JSON或Array字符串转换为对象

Object json = new JSONTokener(stringcontent).nextValue();

阿里巴巴包JSON

JSON.parseObject()或JSON.parseArray()

三、java.util
1、Optional

JDK8提供Optional

该类提供了一种用于表示可选值而非空引用的类级别解决方案

解决NullPointerException问题

Optional不是Serializable,因此它不应该用作类的字段

2、List

ArrayList和LinkedList

ArrayList和LinkedList都是Java集合框架中的数据结构实现,其中ArrayList是基于数组实现的动态数组,而LinkedList则是基于链表实现的双向链表。

ArrayList相比于LinkedList有以下优点:

  1. 快速随机访问:由于ArrayList底层是基于数组实现的,因此可以通过下标快速访问元素,时间复杂度为O(1)。
  2. 在末尾添加和删除元素较快:由于数组的连续性,在末尾添加和删除元素时无需涉及元素移动,只需要修改底层数组的长度即可。
  3. 数据局部性好:由于ArrayList的元素是存储在连续的内存中的,因此在读取数据时,由于CPU预先加载数据时会将数据块作为一个单位从硬盘上读到内存里,因此可以充分利用CPU高速缓存,提高程序效率。

LinkedList相比于ArrayList有以下优点:

  1. 在任意位置快速插入和删除元素:由于LinkedList底层是基于链表实现的,因此可以通过指针操作快速插入和删除元素,时间复杂度为O(1)。
  2. 可以更好地支持栈、队列和双端队列的操作:由于LinkedList具有头、尾两个连接点,因此对于栈、队列和双端队列的操作,LinkedList有更灵活的实现方式。
  3. 不需要预设大小:由于LinkedList底层是基于链表实现的,因此可以动态分配内存,不需要预设初始化的大小。

总体来说,ArrayList适用于读取操作比较多的场景,而LinkedList适用于插入、删除等修改操作比较多的场景。除此之外,ArrayList会逐渐占用更多的内存空间,在极端情况下可能会导致OutOfMemoryError异常,而LinkedList则需要更多的内存空间来存储额外的指针信息,因此在内存使用方面存在一些缺陷。

3、解决OOM问题

使用LinkedList可以解决ArrayList数据量大出现的OOM异常问题,因为它是以节点间的指针关系进行连接,而不是预先分配空间来存储元素的。所以LinkedList能够支持非常大的数据量,并且不会因为内存限制而出现OOM异常。

然而,LinkedList 也有它自己的缺点。由于每个节点需要存储额外的指针信息,因此要占用更多的内存空间。此外,由于节点之间不是连续存储的,访问某个元素时需要遍历整个链表,因此在查询效率和随机访问方面,LinkedList的性能通常比ArrayList差。

总之,如果需要频繁地进行随机访问和查询操作,建议使用ArrayList;如果需要处理大量的元素并避免OOM异常,则可以考虑使用LinkedList。

四、java.lang
Integer封装类

Integer封装类,==对比只能是在-128~127,超过的值用equals对比

五、MyBatis
MyBatis与JDBCTemplate在大量数据的优缺点

MyBatis是运用于内存的,如果读取到内存的数据量过大,很容易导致内存溢出,因此,在大量数据的情况,不建议使用

JDBCTemplate不运用于内存,就不存在内存溢出的情形

六、JDK7
ForkJoinPool

ForkJoinPool是Java 7新增的一个线程池实现,主要用于执行大量的任务并利用多核CPU的优势来提高性能。

ForkJoinPool的核心思想是将任务拆分成更小的子任务,并将这些子任务分配给不同的线程去处理,最终将子任务的结果合并成整个任务的结果。

在实现上,ForkJoinPool使用了"工作窃取"算法,即空闲的线程会主动从其他线程的任务队列中窃取尚未完成的任务进行处理,以达到线程任务负载均衡的效果。

ForkJoinPool的主要优点包括:

  1. 支持处理大量的、细粒度的任务,提高了并行计算的效率和吞吐量。
  2. 可以利用多核CPU的优势,充分发挥硬件资源的潜力。
  3. 比较容易实现任务的分解和合并过程,开发人员可以更加专注于具体的业务。

ForkJoinPool的缺点包括:

  1. 自带的调度逻辑可能造成可预测性变差,增加了一定的开发复杂度。
  2. ForkJoinPool中的线程数量是动态变化的,无法通过配置控制。
  3. 线程间的通信开销较大,可能会降低效率。

在使用ForkJoinPool时,需要提前了解的主要内容包括:

  1. 如何将任务拆分成更小的子任务,并定义如何合并子任务的结果。
  2. 如何选择合适的线程池大小来充分利用硬件资源。
  3. 如何避免线程争用和锁竞争等并发问题。

总体来说,ForkJoinPool是Java中实现高性能多线程计算的一种有效手段,通过合理利用其特点可以使得并行计算的效率得到提高。

七、JDK8
stream流调试

新版本存在这个功能(图:2022版本),旧版本需要安装插件
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值