一、java常见集合:
编辑
二、LinkedList实现关系:
编辑
三、LinkedList造型为Queue:
3.1.简介:
LinkedList造型为Queue表示将LinkedList用作队列:
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
队列类似于 人排队(先加入到队列中的元素 会先被取出)
3.2.常用 方法:
编辑
推荐使用黄框内方法
队列提供的所有方法都以两种形式存在:
- 一种是当操作失败时抛异常,
- 另一种是返回一个null或者false(返回一个特定的值,取决于具体操作)。
案例:
public static void main(String[] args) {
Queue<Integer> que = new LinkedList<Integer>();
//1.给队列que的末尾添加元素
que.offer(0);
que.offer(1);
que.offer(2);
System.out.println(que);//输出结果:[0, 1, 2]
//2.从que队列首部取出某个元素 (而不从队列中删除它)
System.out.println(que);//输出结果:[0, 1, 2]
int top = que.peek();
System.out.println("top=" + top);//输出结果:top=0
System.out.println(que);//输出结果:[0, 1, 2]
//3.从que队列首部取出某个元素 并从队列中删除它,(如果此队列为空,则返回null)
System.out.println(que);
int top = que.poll();
System.out.println("top = "+top);
System.out.println(que);
}
其它
add()、element()、remove()方法与offer()、peek()、poll()目的相同,但是仍有区别。
- offer(),add() 区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
- poll(),remove() 区别:
remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
- peek(),element()区别:
element() 和 peek() 是在队首取元素。与 remove() 类似,队列为空时 element() 会抛异常,而 peek会返回 null
四、LinkedList造型为Deque:
4.1.LinkedList造型为Deque,可以当做双端队列使用
Deque是double ended queue,将其理解成双端结束的队列,双端队列,队首和队尾都可以插入或删除元素。
public stataic void main(String[] args){
Deque<Integer> deque = new LinkedList<Integer>();//定义
deque.addFirst(2); //在队列头部添加
deque.pollFirst(); //删除头部第一个元素(等价于poll())
deque.peekFirst(); //获取头部第一个元素(等价于peek())
deque.addLast(1); //在队列尾部添加(等价于add())
deque.pollLast(); //删除尾部第一个元素
deque.peekLast(); //获取尾部第一个元素
}
编辑
4.2.LinkedList造型为Deque,可以当做栈使用
Queue接口中还规定了栈的方法比如push()和pop()及peekFirst()和pollFirst() (Java官方推荐大家用LinkedList作为栈使用,不推荐Stack)
public stataic void main(String[] args){
Deque<Integer> stack=new LinkedList<>();
System.out.println("栈为空:"+stack.isEmpty()); //判断栈是否为空
stack.addFirst(12);//向栈中存入元素(压栈)
System.out.println("栈为空:"+stack.isEmpty()); //判断栈是否为空
System.out.println(stack.peekFirst()); //获取栈顶元素
System.out.println(stack.pollFirst()); //获取并移除栈顶元素
System.out.println("栈为空:"+stack.isEmpty()); //判断栈是否为空
//注意:压栈和出栈还可以调push和pop方法
//pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
//push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,
//如果栈空间受到限制,push()会发生IllegalStateException
}
其他:
ArrayDeque: 基于数组实现的线性双向队列,通常作为栈或队列使用,但是栈的效率不如LinkedList高。 LinkedList: 基于链表实现的链式双向队列,通常作为栈或队列使用,但是队列的效率不如ArrayQueue高。
zhaoYQ 2022-09-30 10:49