跳至主要內容
Java Comparable和Comparator的区别

6.10 Comparable和Comparator的区别

在前面学习优先级队列的时候,我们曾提到过 Comparable和Comparator,那这篇继续以面试官的角度去切入,一起来看。

那天,小二去马蜂窝面试,面试官老王一上来就甩给了他一道面试题:请问Comparable和Comparator有什么区别?小二差点笑出声,因为三年前,也就是 2021 年,他在《二哥的Java进阶之路》上看到过这题😆。


沉默王二大约 6 分钟Java核心集合框架(容器)
栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈栈

6.4 栈Stack

讲真,Stack 这个类在 Java 应用中并不常用,但栈这个数据结构在整个计算机体系中却十分重要。所以我们还是放到集合框架里来讲一讲。

栈(stack),有些地方喜欢称呼它为堆栈,我就很不喜欢,很容易和 heap(堆)搞混,尤其是对于新手来说,简直就是虐心。

栈数据结构

栈是一种非常有用的数据结构,它就像一摞盘子,第一个放在最下面,第二个放在第一个上面,第三个放在第二个上面,最后一个放在最上面。


沉默王二大约 7 分钟Java核心集合框架(容器)
Java 优先级队列PriorityQueue详解:从源码分析到实践应用

6.9 优先级队列PriorityQueue详解

继续有请王老师,来上台给大家讲讲优先级队列 PriorityQueue。

PriorityQueue 是 Java 中的一个基于优先级堆的优先队列实现,它能够在 O(log n) 的时间复杂度内实现元素的插入和删除操作,并且能够自动维护队列中元素的优先级顺序。

通俗来说,PriorityQueue 就是一个队列,但是它不是先进先出的,而是按照元素优先级进行排序的。当你往 PriorityQueue 中插入一个元素时,它会自动根据元素的优先级将其插入到合适的位置。当你从 PriorityQueue 中删除一个元素时,它会自动将优先级最高的元素出队。


沉默王二大约 12 分钟Java核心集合框架(容器)
Java WeakHashMap详解(附源码分析)

在Java中,我们一般都会使用到Map,比如HashMap这样的具体实现。更高级一点,我们可能会使用WeakHashMap。

WeakHashMap其实和HashMap大多数行为是一样的,只是WeakHashMap不会阻止GC回收key对象(不是value),那么WeakHashMap是怎么做到的呢,这就是我们研究的主要问题。

在开始WeakHashMap之前,我们先要对弱引用有一定的了解。


沉默王二大约 5 分钟Java核心集合框架(容器)
详解 Java 中的双端队列(ArrayDeque附源码分析)

6.8 双端队列ArrayDeque详解

好,我们这节继续有请王老师上台来给大家讲 ArrayDeque,鼓掌欢迎了👏🏻。

Java 里有一个叫做Stack的类,却没有叫做Queue的类(它只是个接口名字,和类还不一样)。

public interface Queue<E> extends Collection<E> {}

沉默王二大约 14 分钟Java核心集合框架(容器)
Java LinkedHashMap详解:从源码分析到实践应用

6.6 LinkedHashMap详解(附源码)

这篇继续换个文风来写,给大家一点新鲜的空气。

俗话说了,“金无足赤人无完人”,HashMap 也不例外,有一种需求它就满足不了,假如我们需要一个按照插入顺序来排列的键值对集合,那 HashMap 就无能为力了。那该怎么办呢?必须得上今天这篇文章的主角:LinkedHashMap。

同学们好啊,还记得 HashMap 那篇吗?我自己感觉写得非常棒啊,既通俗易懂,又深入源码,真的是分析得透透彻彻、清清楚楚、明明白白的。(一不小心又甩了三个成语,有文化吧?)HashMap 哪哪都好,真的,只要你想用键值对,第一时间就应该想到它。


沉默王二大约 15 分钟Java核心集合框架(容器)
Java TreeMap详解:从源码分析到实践应用

6.7 TreeMap详解(附源码)

下面有请王老师上台,来给大家讲一讲 TreeMap,鼓掌了!

之前 LinkedHashMap 那篇文章里提到过了,HashMap 是无序的,所以有了 LinkedHashMap,加上了双向链表后,就可以保持元素的插入顺序和访问顺序,那 TreeMap 呢?


沉默王二大约 15 分钟Java核心集合框架(容器)
Java HashMap详解:源码分析、hash 原理、扩容机制、加载因子、线程不安全

6.5 HashMap 详解(附源码)

这篇文章将会详细透彻地讲清楚 Java 的 HashMap,包括 hash 方法的原理、HashMap 的扩容机制、HashMap 的加载因子为什么是 0.75 而不是 0.6、0.8,以及 HashMap 为什么是线程不安全的,基本上 HashMap 的常见面试题,都会在这一篇文章里讲明白。

HashMap 是 Java 中常用的数据结构之一,用于存储键值对。在 HashMap 中,每个键都映射到一个唯一的值,可以通过键来快速访问对应的值,算法时间复杂度可以达到 O(1)。


沉默王二大约 49 分钟Java核心集合框架(容器)
阿里Java开发规约:禁止在foreach里执行元素的删除操作

6.15 Java foreach 循环陷阱

这篇文章同样采用小二去面试的形式,给大家换个胃口。

那天,小二去阿里面试,面试官老王一上来就甩给了他一道面试题:为什么阿里的 Java 开发手册里会强制不要在 foreach 里进行元素的删除操作?


沉默王二大约 9 分钟Java核心集合框架(容器)
2