|
1 | | -学习笔记 |
| 1 | +学习笔记 |
| 2 | + |
| 3 | +1.用 add first 或 add last 这套新的 API 改写 Deque 的代码 |
| 4 | + |
| 5 | +```java |
| 6 | +Deque<String> deque = new LinkedList<String> () |
| 7 | + |
| 8 | +deque.addFirst("a"); |
| 9 | +deque.addLast("b"); |
| 10 | +deque.addLast("c"); |
| 11 | +System.out.println(deque); |
| 12 | + |
| 13 | +String str = deque.peekFirst(); |
| 14 | +System.out.println(str); |
| 15 | +System.out.println(deque); |
| 16 | + |
| 17 | +while( deque.size() > 0 ) { |
| 18 | + System.out.println(deque.removeFirst()); |
| 19 | +} |
| 20 | +System.out.println(deque); |
| 21 | +``` |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | +2.分析 Queue 和 Priority Queue 的源码 |
| 26 | + |
| 27 | +> 1.Queue, 队列,特点是数据先进先出,而PriorityQueue,优先级队列,使用上跟普通队列一样,唯一区别是PriorityQueue会根据排序规则决定谁在队头,谁在队尾。 |
| 28 | +> |
| 29 | +> |
| 30 | +> |
| 31 | +> 2.Queue接口方法声明如下: |
| 32 | +> |
| 33 | +> | 方法 | 说明 | |
| 34 | +> | ------------------ | ------------------------------------------------------------ | |
| 35 | +> | boolean add(E e) | 在队列头部增加一个元素,如果容量已满,则抛出异常,成功则返回true | |
| 36 | +> | boolean offer(E e) | 在队列头部增加一个元素,如果容量已满,则返回false,成功加入,返回true; | |
| 37 | +> | E remove(); | 将队列头部元素移出队列并返回,如果队列为空,则抛出异常。 | |
| 38 | +> | E poll(); | 将队列头部元素移出队列并返回,如果队列为空,返回null | |
| 39 | +> | E element(); | 返回队列头部节点,但不移除队列头节点,如果队列为空,则抛出异常。 | |
| 40 | +> | E peek(); | 返回队列头部节点,但不移除队列头节点,如果队列为空,返回null。 | |
| 41 | +> |
| 42 | +> 优先级队列 PriorityQueue 类 实现了 Queue接口,但由于操作元素的规则不同,PriorityQueue有自己的 add() /offer() /remove() 等实现。 |
| 43 | +> |
| 44 | +> 其元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。 |
| 45 | +> |
| 46 | +> 方法: |
| 47 | +> |
| 48 | +> ```java |
| 49 | +> Comparator<? super E> comparator() |
| 50 | +> ``` |
| 51 | +> |
| 52 | +> 返回排序用的Comparator,如果是自然顺序排序,则返回null |
| 53 | +> |
| 54 | +> PriorityQueue 队列的头,指排序规则最小元素。如果多个元素都是最小值则随机选一个。 |
| 55 | +> |
| 56 | +> |
| 57 | +> |
| 58 | +> 3.PriorityQueue的实现,使用了最小堆,底层用数组存储:object[]数组 |
| 59 | +> |
| 60 | +> |
| 61 | +
|
| 62 | +
|
| 63 | +
|
| 64 | +第一周学习数组链表,栈和队列,熟悉掌握各个数据结构查询以及修改的时间复杂度; |
| 65 | +
|
| 66 | +在应用到解决问题过程中,有如下收获 |
| 67 | +
|
| 68 | +一种解决方法:左右夹逼法 |
| 69 | +
|
| 70 | +一种思考方式:寻找最近重复子问题 |
| 71 | +
|
| 72 | +一种加速思想:空间换时间,低维升高维 |
0 commit comments