Skip to content

Commit 23ebc3c

Browse files
author
xutao
committed
编辑
1 parent 56e174e commit 23ebc3c

1 file changed

Lines changed: 93 additions & 2 deletions

File tree

Week01/NOTE.md

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,94 @@
1+
### JavaDeque
12

2-
学习笔记
3-
d d up`
3+
```java public class DequeTest {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
10+
Deque<String> deque = new LinkedList<String>();
11+
deque.add("d");
12+
deque.add("e");
13+
deque.add("f");
14+
15+
//从队首取出元素,不会删除
16+
System.out.println("队首取出元素:"+deque.peek());
17+
System.out.println("队列为:"+deque);
18+
19+
//从队首加入元素(队列有容量限制时用,无则用addFirst)
20+
deque.offerFirst("c");
21+
System.out.println("队首加入元素后为:"+deque);
22+
//从队尾加入元素(队列有容量限制时用,无则用addLast)
23+
deque.offerLast("g");
24+
System.out.println("队尾加入元素后为:"+deque);
25+
26+
//队尾加入元素
27+
deque.offer("h");
28+
System.out.println("队尾加入元素后为:"+deque);
29+
30+
//获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null
31+
deque.removeFirst();
32+
System.out.println("获取并移除队列第一个元素后为:"+deque);
33+
34+
//获取并移除队列第一个元素,此方法与pollLast 唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
35+
deque.removeLast();
36+
System.out.println("获取并移除队列最后一个元素后为:"+deque);
37+
38+
//获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
39+
System.out.println("获取队列第一个元素为:"+deque.getFirst());
40+
System.out.println("获取队列第一个元素后为:"+deque);
41+
42+
//获取队列最后一个元素.此方法与 peekLast 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
43+
System.out.println("获取队列最后一个元素为:"+deque.getLast());
44+
System.out.println("获取队列第一个元素后为:"+deque);
45+
46+
//循环获取元素并在队列移除元素
47+
while(deque.size()>0){
48+
System.out.println("获取元素为:"+ deque.pop()+" 并删除");
49+
}
50+
System.out.println("队列为:"+deque);
51+
}
52+
53+
}
54+
```
55+
56+
### Java Queue源码理解
57+
#### FIFO数据结构,主要提供如下几个方法
58+
- add(E e);添加元素
59+
- offer(E e);添加元素
60+
- E remove();移除元素
61+
- E poll();移除元素
62+
- E element();查看头部元素
63+
- E peek();查看头部元素
64+
65+
#### 明细
66+
- 1、add()和offer()区别:
67+
add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!
68+
- 2、poll()和remove()区别:
69+
remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。
70+
- 3、element() 和 peek() 区别:
71+
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
72+
73+
74+
75+
### java priorityQueue理解
76+
- peek()//返回队首元素
77+
- poll()//返回队首元素,队首元素出队列
78+
- add()//添加元素
79+
- size()//返回队列元素个数
80+
- isEmpty()//判断队列是否为空,为空返回true,不空返回false
81+
#### 明细
82+
- 1.需要实现比较器实现优先级比较
83+
- 2.通过优先级,保证队列基于优先级是有序
84+
- 3.队列插入和删除基于此特性会有所牺牲。插入和删除的时间复杂度是O(log)。其余和和queue一样。
85+
- 4.底层实现是通过完全二叉树实现的小顶堆。
86+
87+
88+
89+
90+
### 总结:
91+
- 1.视频内容有点长,内容完全掌握可能需要10个小时左右,自己可以适当采取合适的适合自己的方法学习。
92+
- 2.对于算法的一些内容,还是要在课后花时间去消化,不是一遍两遍就能理解的
93+
- 3.关于算法的3sum和栈算圆柱的体积,这样的做法,还是需要去看一下证明,为什么这样写是合理的。不是说只要背算法,强迫症使我想要知道为什么这样做是可以求解的不会漏掉可能的解。
94+
- 4.最后,这块,比想象中的花时间要多。还是要多花点时间把。

0 commit comments

Comments
 (0)