> Yuyy
Yuyy
Yuyy

保持一颗探索的心

使用双花括号初始化集合,可别这么干

Double Brace Initialization should not be used 前言 最近在修改sonar问题时,发现有人使用双花括号初始化集合,提示可能发生内存泄漏。这种初始化方式倒是见过,只知道是使用了匿名内部类,但没有意识到这个问题。 实测 A 提供两种Map的初始化方法,为了观察是…

   36   2021-09-10   去看看

HashMap源码解读:扩容

HashMap源码解读:扩容 引言 HashMap的扩容是个很重要的操作,jdk1.7往前这里会发生死链问题,都是值得研究的。我最开始以为HashMap线程不安全的原因是因为扩容,没有注意到jdk版本的影响,就去看1.8的扩容为啥会发生死链,但因此也发现了这个方法里的巧妙设计。 分…

   20   2021-09-09   去看看

九、原型模式

Prototype Design Pattern 适用场景 创建对象过程复杂,消耗性能。但内存中已有一个对象,且字段差不多,可采用复制该对象来使用,注意深拷贝、浅拷贝。 原型模式注重的是思想,Beanutils就是原型模式的经典实现。

   16   2021-09-08   去看看

八、建造者模式

建造者模式 适用场景 创建对象的参数很多 如果参数为非必填的话,可以使用set方法,必填的通过构造方法传入,并进行校验。但是必填项很多时,构造方法的参数列表就很臃肿了。 属性之间有依赖关系 参数过多时使用set方法传入,依赖关系校验就不可控了。因为对象已…

   16   2021-09-07   去看看

LeetCode:链表的中间结点_876

思路 一次遍历链表,寻找中间节点。两个信息,一、要遍历完,二、遍历完时需要遍历到中间节点。所以需要两个指针,并且速度是1:2。注意题目要求中点为两个时,取后面个。 题目 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返…

   20   2021-09-06   去看看

LeetCode:合并K个升序链表_23

思路 这题是21的升级版,从两路归并到多路归并,其中运用了优先队列来优化。感觉这题谈不上困难,只是运用了两个知识点,逻辑不复杂。 题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。   示例 …

   14   2021-09-06   去看看

LeetCode:合并两个有序链表_21

思路 基础班双指针,还有归并的思想 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。    示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出…

   15   2021-09-04   去看看

LeetCode:二叉树展开为链表_114

思路 最终需要的结果是前序遍历,最简单的方式就是递归前序遍历,结果存到队列里,最后再组装。难一点的就是一边遍历一边组装结果,如果是递归,遍历左节点时,将父节点的右节点更改为左节点(题目要求的结果),那么会影响右节点的遍历(已经被替换成左节点了)。所…

   18   2021-09-03   去看看

六&七、工厂模式

工厂模式 作用 唯一的职责就是创建对象,将复制的创建过程,获取对象的逻辑与对象的使用进行解耦。 分为简单工厂、工厂方法、抽象工厂。 简单工厂 对象获取逻辑复杂时,例如根据文件类型获取对应的解析器,解析器有很多,就需要在使用对象前,进行臃肿的逻辑判断…

   16   2021-09-03   去看看

LeetCode117. 填充每个节点的下一个右侧节点指针_II

思路 116题还能通过画图看出规律,但这是升级版,非完美二叉树。这题很容易想到用层次遍历,但是是中等难度,肯定不是最优解。 分析下,层次遍历时间复杂度O(N),已经做到极致了。那么只能从空间复杂度下手,层次遍历空间复杂度为O(N),如果不存副本,倒是可以优化。…

   21   2021-09-02   去看看
加载更多
友情链接
标签
归档
近期文章