容器

容器

为什么不推荐在项目中使用Vector、Stack、HashTable?

为了方便开发,Java提供了很多容器,比如ArrayList、LinkedList、HashMap,这些容器底层封装了常用的数据结构,比如数组、链表、哈希表。尽管平时的开发几乎离不开容器,但据我了解,很多程序员只会使用最简单的几个,对容器的全貌没有一个系统性的认识,在使用时,也只是随手抓一个容器就用,不了解其底层实现原理,随便滥用的情况非常常见,极容易影响程序的性能。所以,本节就先粗略地介绍各个容器,让你对Java容器有一个框架性的认识。在后面的章节中,我们再详细讲解重点、难点容器。


Mr.Zhang12/9/2022Java容器大约 13 分钟
容器工具类

容器工具类

请描述TimSort和DualPivotQuickSort的实现原理

上一节,我们罗列了JCF中的容器,实际上,JCF还提供了一个工具类Collections,是开发中非常常用的一个类。Collections类中包含大量操作容器的静态函数,比如sort()函数、emptyList()函数等。其中涉及的一些知识点,也在面试中经常被考到,比如sort()函数底层的TimSort和DualPivotQuickSort两种排序算法的实现原理和区别是什么。


Mr.Zhang12/9/2022Java容器大约 22 分钟
HashMap

HashMap

为何HashMap中数组的大小必须是2的幂次方?

上两节,我们粗略讲了JCF中的各个容器,给你构建了一个系统性的框架图。本节,我们重点讲一下HashMap。HashMap在Java编程中,使用频率非常高,而且,因为其底层实现比较复杂,在面试中,也经常被面试官拿来考察候选人对技术掌握的深度。本节,我们就从基本原理、哈希函数、装载因子、动态扩容、链表树化等方面,详细剖析HashMap的实现原理。

一、基本原理


Mr.Zhang12/9/2022Java容器大约 26 分钟
LinkedHashMap

LinkedHashMap

如何使用LinkedHashMap实现LRU缓存?

上一节我们讲了一个重点容器HashMap,其内部实现比较复杂,工作中和面试中都经常被涉及。本节,我们再讲解一个容易跟HashMap混淆的容器LinkedHashMap。LinkedHashMap是HashMap的增强版,既能实现快速的增删改查操作,又能实现容器内元素的有序遍历。借助这个特性,利用LinkedHashMap可以轻松实现LRU缓存,具体如何来做呢?带着这个问题,我们来学习本节的内容吧。


Mr.Zhang12/9/2022Java容器大约 15 分钟
迭代器

迭代器

迭代器:绝大多数Java容器都有的modCount属性是做什么用的?

讲到容器,我们不得不讲一下迭代器。迭代器是遍历容器的常用方法。Java中的迭代器是迭代模式的经典实现。虽然大部分情况下迭代器的使用都比较简单,但有些情况下也会比较复杂,比如在创建迭代器之后,增删容器中的元素,再使用迭代器遍历容器,会导致未决行为(结果不确定)。为了解决这一问题,迭代器又设计了一套复杂的保护机制,而这套机制在面试中又经常被考察。所以,本节我们就来详细讲一讲迭代器。

一、容器的几种遍历方法


Mr.Zhang12/9/2022Java容器大约 14 分钟