使用Properties

在编写应用程序的时候,经常需要读写配置文件。例如,用户的设置: # 上次最后打开的文件: last_open_file=/data/hello.txt # 自动保存文件的时间间隔: auto_save_interval=60 配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map<String, String>来表示它。 因为配置文件
使用Properties

使用Set

我们知道,Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。 如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set。 Set用于存储不重复的元素集合,它主要提供以下几个方法: 将元素添加进Set<E>:boolean add(E e) 将元素从Se
使用Set

使用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