使用Queue

队列(Queue)是一种经常使用的集合。Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。它和List的区别在于,List可以在任意位置添加和删除元素,而Queue只有两个操作: 把元素添加到队列末尾; 从队列头部取出元素。 超市的收银台就是一个队列: 在Java的标准库中,队列接口Queue定义了以下几个方法: int size():获取队列长度;
使用Queue

使用PriorityQueue

我们知道,Queue是一个先进先出(FIFO)的队列。 在银行柜台办业务时,我们假设只有一个柜台在办理业务,但是办理业务的人很多,怎么办? 可以每个人先取一个号,例如:A1、A2、A3……然后,按照号码顺序依次办理,实际上这就是一个Queue。 如果这时来了一个VIP客户,他的号码是V1,虽然当前排队的是A10、A11、A12……但是柜台下一个呼叫的客户号码却是V1。 这个时候,我们发现,要实现“
使用PriorityQueue

使用Deque

我们知道,Queue是队列,只能一头进,另一头出。 如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。 Java集合提供了接口Deque来实现一个双端队列,它的功能是: 既可以添加到队尾,也可以添加到队首; 既可以从队首获取,又可以从队尾获取。 我们来比较一下Queue和Deque出队和入队的方法: Queue Deque 添加
使用Deque

使用Stack

栈(Stack)是一种后进先出(LIFO:Last In First Out)的数据结构。 什么是LIFO呢?我们先回顾一下Queue的特点FIFO: ──────────────────────── (\(\ (\(\ (\(\ (\(\ (\(\ (='.') ──▶ (='.') (='.') (='.') ──▶ (='.') O(_")") O(_")") O(_")") O(_")")
使用Stack

使用Iterator

Java的集合类都可以使用for each循环,List、Set和Queue会迭代每个元素,Map会迭代每个key。以List为例: List<String> list = List.of("Apple", "Orange", "Pear"); for (String s : list) { System.out.println(s); } 实际上,Java编译器并不知道如何遍历Lis
使用Iterator

使用Collections

Collections是JDK提供的工具类,同样位于java.util包中。它提供了一系列静态方法,能更方便地操作各种集合。  注意 Collections结尾多了一个s,不是Collection! 我们一般看方法名和参数就可以确认Collections提供的该方法的功能。例如,对于以下静态方法: public static boolean addAll(Collection<? super
使用Collections

File对象

在计算机系统中,文件是非常重要的存储方式。Java的标准库java.io提供了File对象来操作文件和目录。 要构造一个File对象,需要传入文件路径: import java.io.*; public class Main { public static void main(String args) { File f = new File("C:\\Windows\\notepad.exe"
File对象

InputStream

InputStream就是Java标准库提供的最基本的输入流。它位于java.io这个包里。java.io包提供了所有同步IO的功能。 要特别注意的一点是,InputStream并不是一个接口,而是一个抽象类,它是所有输入流的超类。这个抽象类定义的一个最重要的方法就是int read(),签名如下: public abstract int read() throws IOException; 这个
InputStream