11 2022 档案

摘要:linkedlist 既实现了 list 接口,又实现了 queue, deque 接口, 底层用链表数据结构,便于增删元素和顺序迭代 arraydeque 实现了 queue和deque接口 , 底层用数组实现,便于查找 arraylist 实现list接口,底层为数组 阅读全文
posted @ 2022-11-24 14:50 yanher 阅读(64) 评论(0) 推荐(0)
摘要:这种方式有问题的,因为 o1 - o2 可能使整型溢出,导致排序结果异常 : Arrays.sort(input, (o1,o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]); 应该把 减法运算改为比较运算: Arrays.sort(inpu 阅读全文
posted @ 2022-11-21 22:32 yanher 阅读(48) 评论(0) 推荐(0)
摘要:public class MyComparator<Integer> implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2){ // o1 代表前一个元素, o2代表后一个元素 //返 阅读全文
posted @ 2022-11-21 21:31 yanher 阅读(34) 评论(0) 推荐(0)
摘要:1. 如果方法体为表达式,算式 , 可以不加大括号 Arrays.sort(startEnd, (o1,o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]); 2. 如果要加大括号,则必须是完整的语句, 需要有 “return ”关键字, 语句 阅读全文
posted @ 2022-11-21 20:40 yanher 阅读(107) 评论(0) 推荐(0)
摘要:1. 使用list, 调整的时候list可以删除尾部的元素 ArrayList<Integer> list = (ArrayList<Integer>)Arrays.stream(a).boxed().collect( Collectors.toList()); //大根堆 buildHeap(li 阅读全文
posted @ 2022-11-19 12:36 yanher 阅读(42) 评论(0) 推荐(0)
摘要:方法一: spring aop 通过spring aop 配置需要扫描的包,配置切点切面,在切点前后获取方法的注解,如果有限流器注解则调用注解参数对应的限流器 方法二: javaagent + javassist/cglib 基于javaagent来进行类加载事件监听和行为触发,基于javassis 阅读全文
posted @ 2022-11-16 07:33 yanher 阅读(129) 评论(0) 推荐(0)
摘要:默认的str.split("xx") , 如果xx为正则特殊字符比如 “.” 需要转义“\\.” 默认的 str.split("xx") 在jdk代码 底层传入 split(regex,0) 其中第二个参数 0 代表丢弃空值的子字符串, -1 代表保留空值的子字符串, 其它正整数表示输出字符串数组的 阅读全文
posted @ 2022-11-13 21:15 yanher 阅读(33) 评论(0) 推荐(0)
摘要:java String 类型为Final, 字符串操作后直接返回新的字符串,原字符串对象没有变 阅读全文
posted @ 2022-11-13 14:47 yanher 阅读(12) 评论(0) 推荐(0)
摘要:因为堆结构只保证 根节点比双子节点都大或小 1 求最小的n个数: 构建n个数的大顶堆,依次弹出堆顶再往下调整(用例省略) 2 求最大的n个数: 构建n个数的小顶堆,依次弹出堆顶再往下调整(用例省略) 3 求第n大的数: 构建所有元素的大顶堆,依次弹出堆顶,堆底放到堆顶并向下调整,重复n次 用例: p 阅读全文
posted @ 2022-11-13 04:33 yanher 阅读(30) 评论(0) 推荐(0)
摘要:1 左右哨兵等于pivot的情况要接着走,不然有可能一直不动,无限循环 2 需要先走右指针再走左指针,因为pivot在最左侧,最终停留点应该比pivot小,这样交换后小的在前; 如果左侧先走,最终停留点比pivot大 3 迭代下一轮循环的时候,不要包括相遇点,因为这个点前面都比它大,后面都比它小,不 阅读全文
posted @ 2022-11-13 02:34 yanher 阅读(99) 评论(0) 推荐(0)
摘要:private void buildHeap(int[] h) { int l = h.length; //这里需要从下向上调整,因为从上向下调整只能让最小值下到底端,只有从下向上调整可以让最大值上到顶端 //shiftDown需要递归,如果不递归,这里只能保证最大的元素在堆顶,但是不能保证子分支都 阅读全文
posted @ 2022-11-10 00:34 yanher 阅读(21) 评论(0) 推荐(0)
摘要:堆是 完全二叉树, 不一定是满二叉树, 可以用数组存放(普通二叉树只能用带指针的链表) i 节点的父节点 下标为 i/2 , 子节点下标为 2i , 2i+1 , 二叉树高度或深度为 logN+1(计算机领域底数为2) 阅读全文
posted @ 2022-11-09 11:20 yanher 阅读(30) 评论(0) 推荐(0)
摘要:PriorityQueue的底层实现是 堆, 默认为最小堆: PriorityQueue<Integer> q = new PriorityQueue<>(); 最大堆初始化: PriorityQueue<Integer> q = new PriorityQueue<>((o1, o2)->o2.c 阅读全文
posted @ 2022-11-08 20:12 yanher 阅读(24) 评论(0) 推荐(0)
摘要:stack底层为数组, foreach和iterator迭代时遍历数组输出, public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializabl 阅读全文
posted @ 2022-11-06 08:30 yanher 阅读(92) 评论(0) 推荐(0)
摘要:1. ArrayList[] result = new ArrayList[len]; 数组泛型类型erase, 不能定义泛型数组 2. Arrays.asList(result) 返回的不是ArrayList类型,而是一个内部类 所以需要用ArrayList包装 new ArrayList<>(A 阅读全文
posted @ 2022-11-01 23:22 yanher 阅读(154) 评论(0) 推荐(0)