
数据结构
Be_insighted
强者自救,圣者渡人!
展开
-
仅用基本类型与String完成除法,不能整除向上保留两位小数
如0.125 ==>0.13再如0.1==>0.10import lombok.extern.slf4j.Slf4j;@Slf4jpublic class TestIntDivide2Float { public static void main(String[] args) { double temp = 0.256983D; String postfix = String.valueOf(temp); if (po..原创 2022-05-19 21:31:34 · 284 阅读 · 0 评论 -
ArrayList 和 LinkedList 有什么区别?
ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于 LinkedList。01、ArrayList 是如何实现的?ArrayList 实现了 List 接口,继承了 AbstractList 抽象类,底层是基于数组实现的,并且实现了动态扩容。publicclassArrayList<E>extendsAbstractList<E>implemen...原创 2020-09-28 14:49:31 · 411 阅读 · 0 评论 -
判断单链表是否有环,有环则求出入环节点
判断有环问题:快慢指针,慢指针每次走一步,快指针每次走两步,如果相遇则一定有环!有环的入环节点:相遇之后,慢指针继续按原来的步骤走,快指针从头开始,此时都以每次走1步的速度向前走。(其实这里只要保证一个指针从起点走,一个指针从相遇点走就可以了,并不一定非是fast指针从起点走),当二者相遇时,则相遇的节点则为入环节点!代码:public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) {原创 2022-05-06 11:40:29 · 719 阅读 · 0 评论 -
ThreadLocal线程重用bug、ConcurrentHashMap只能保证原子写线程安全
ThreadLocal线程重用bug在有多核的计算机上运行如下代码,threadLocal/wrong 这个多请求几次,用不同的整数请求,before并非总是null!!!tomcat在运行时默认值不是1个线程,线程重用时,ThreadLocal变量就被下一个线程拥有了!在controller中声明: private ThreadLocal<Integer> currentUser = ThreadLocal.withInitial(() -> null);@A原创 2022-03-24 17:04:29 · 5282 阅读 · 0 评论 -
判断括号匹配
括号匹配(思路:遇到左括号时将右括号加入到栈中,遇到右括号则出栈同时与上一个入栈的括号比较,如果不是它的右括号,则不是对称的括号)package com.example.demo.utils;import org.apache.commons.lang3.StringUtils;import java.util.Arrays;import java.util.List;import java.util.Stack;/** * 括号匹配 */public class Bracke.原创 2022-01-08 18:18:43 · 793 阅读 · 0 评论 -
参数层级嵌套,递归校验(结构体&数组嵌套、其他基本数据类型)
public class DataTypeSpecCheckUtil { static final String MIN = "min"; static final String MAX = "max"; static final String UNIT = "unit"; static final String UNIT_NAME = "unitName"; static final String STEP = "step"; static final .原创 2021-10-28 07:58:49 · 404 阅读 · 0 评论 -
Java求两个集合的交集和集合拷贝
private List<Long> getIntersection(List<Long> source1, List<Long> source2) { List<Long> ids = new ArrayList<>(); if (CollectionUtils.isEmpty(source1) || CollectionUtils.isEmpty(source2)) { return i.原创 2021-09-04 22:38:04 · 294 阅读 · 0 评论 -
Java中5种方法进行Map遍历,建议使用Map.Entry(优雅)
for (Map.Entry<Integer, ListenableFuture<List<SellerQueryOrdersDto>>> entry : mapOrderDto.entrySet()) { if (entry == null) { continue; } try { dtoList...原创 2021-08-25 23:11:31 · 1149 阅读 · 3 评论 -
Java 基础核心知识点
面向对象编程(OOP)Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。封装封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或...原创 2020-10-30 08:25:38 · 687 阅读 · 2 评论 -
ThreadLocal 实现原理,如何防止内存泄露,TransmittableThreadLocal(ThreadLocal线程池线程重用会导致数据污染)
ThreadLocal实现的原理首先,我们来看一下ThreadLocal的set()方法,因为我们一般使用都是new完对象,就往里边set对象了 public void set(T value) { // 得到当前线程对象 Thread t = Thread.currentThread(); // 这里获取ThreadLocalMap ThreadLocalMap map = getMap(t); // 如果m......原创 2020-10-27 18:02:25 · 1342 阅读 · 0 评论 -
ABA问题初探,乐观锁&悲观锁;ABA问题产生,解决,附代码
什么是ABA问题?在多线程运行中,因指令重排序优化的存在,数据依赖性问题。在极短的时间里A线程处理完数据之后又将数据修改回第一次修改时的值。在此过程中尽管B线程从主存拿到了修改前的值,在A处理过程中对B透明,A处理完之后,B线程去操作该数据,并未发现这个变量被修改过。这一过程我们称为:ABA问题。ABA问题的处理* 原子引用(AtomicSatmpedReference):带时间戳的原子...原创 2019-12-27 09:48:36 · 1212 阅读 · 0 评论 -
双重嵌套list转Map,附实验结果
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/** * Author: Be_insightful * Description: * * @date 2019/10/16 15:08 **/@Data@NoArgsConstructor@AllArg...原创 2019-10-17 18:41:02 · 1254 阅读 · 0 评论 -
List转Page对象,看这篇就够了,附代码、实验结果&分页自己编程实现
List 转 Page 对象public class ListConvertPageUtil { public static <T> Page<T> convertList2PageVO(List<T> list, Integer page, Integer size) { Pageable pageable = new PageRequest(page - 1, size); if (CollectionUtils.is...原创 2020-09-29 17:05:51 · 10699 阅读 · 2 评论 -
Java8新特性Stream之list转map及问题(Duplicate key)解决,附实验结果
Java8新特性Stream之list转map及问题(Duplicate key)解决,附实验结果Exception in thread "main" java.lang.IllegalStateException: Duplicate key ??*VO (??=AAAAA, ??**=1, **??=null, ??=null) at java.util.stream.Collectors.lambda$throwingMerger$113(Collectors.java:133).原创 2020-07-17 10:26:03 · 1466 阅读 · 0 评论 -
List之stream统计(lambda表达式)某个字段的个数转Map(key:字段名 value: 数量)、单个属性的数组统计每个元素个数
List之stream统计某个字段的个数转Map(key:字段名 value: 数量)在sql中我们统计时免不了使用group by,count, count distinct;stream一定程度上就是sql的变身!方便使用者处理数据!在实际业务中,免不了要统计满足某种条件下的商品销售的数目、如,查询某个店铺商品的销售数据: /** * 统计某个店铺或者所有店铺商品销售数量 goodsId :long * 关键: Collectors.groupingBy(Goods原创 2020-07-31 10:09:26 · 7888 阅读 · 0 评论 -
价格计算之BigDecimal,精度处理,小数点后两位处理,简单购物车价格计算&十分位为0的丢失处理 (toPlainString())
Double cartPrice = 0.0D;BigDecimal goodsPrice = BigDecimal.valueOf(goods.getGoodsPrice());BigDecimal num = new BigDecimal(goods.getGoodsNum);double tmp = goodsPrice.multiply(num).doubleValue();if ((BigDecimal.valueOf(tmp).compareTo(new BigDecimal("0.0.原创 2020-08-21 14:55:54 · 1137 阅读 · 0 评论 -
浅析HashMap,何时树化?常见面试题解析
首先来看下HashMap的类描述/** * Hash table based implementation of the <tt>Map</tt> interface. This * implementation provides all of the optional map operations, and permits * <tt>null</tt> values and the <tt>null</tt> key.原创 2020-09-04 15:48:01 · 1052 阅读 · 0 评论 -
JDK1.8中ConcurrentHashMap源码解析,底层如何保证安全高效的?
在高并发、多线程场景下,HashMap不安全、HashTable效率低,这时需要在保持同步的同时并发效率比较高,那么,ConcurrentHashMap就自信地出场了...看一下源码中对这个类的描述:这个哈希表的主要设计目标是维护并发可读性(通常是get()方法,但也有迭代器和相关方法),同时最小化更新争用。次要目标是保持空间消耗与java.util相同或更好。HashMap,并支持高多个线程对空表的初始插入率。键值信息存在Node节点中,该节点主要信息为hash、key、va...原创 2020-09-22 17:04:22 · 1369 阅读 · 0 评论 -
深入理解写时复制技术!CopyOnWrite
写时复制(读写分离的思想):读取时不加锁只是写入和删除时加锁 实现机制(volatile + ReentrantLock)往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。提高并发:我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。内存占用:因为Copy..原创 2020-09-29 16:08:37 · 2310 阅读 · 0 评论