Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展。 栈是 后进先出的。 栈提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
方法摘要 | |
---|---|
boolean |
empty() 测试堆栈是否为空。 |
E |
peek() 查看堆栈顶部的对象,但不从堆栈中移除它。 |
E |
pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
E |
push(E item) 把项压入堆栈顶部。 |
int |
search(Object o) 返回对象在堆栈中的位置,以 1 为基数。 |
现附上例子,后续继续总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/**
* @作者 whs
* @创建日期 2015年2月4日
* @版本 V 1.0
*/
package
thread.pool;
import
java.util.Stack;
public
class
StackExam {
public
static
void
main(String[] args) {
Stack<String> stack =
new
Stack<String>();
System.out.println(
"now the satck is "
+isEmpty(stack));
stack.push(
"1"
);
stack.push(
"2"
);
stack.push(
"3"
);
stack.push(
"4"
);
stack.push(
"5"
);
stack.push(
"6"
);
System.out.println(
"now the stack is "
+isEmpty(stack));
System.out.println(stack.peek());
//查看堆栈顶部的对象,并返回该对象,但不从堆栈中移除它。
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.search(
"3"
));
//,此方法返回最近的目标对象距堆栈顶部出现位置到堆栈顶部的距离;
}
public
static
String isEmpty(Stack<String> stack){
return
stack.empty() ?
"empty"
:
"not empty"
;
}
}
|
输出为:
1
2
3
4
5
6
|
now the satck is empty
now the stack is not empty
6
6
5
2
|
接口 Queue队列:
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头 都是调用 remove()
或 poll()
所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。
方法摘要 | |
---|---|
boolean |
add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 |
E |
element() 获取,但是不移除此队列的头。 |
boolean |
offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E) ,后者可能无法插入元素,而只是抛出一个异常。 |
E |
peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 |
E |
poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 |
E |
remove() 获取并移除此队列的头。 |
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。
注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Queue<String> queue=
new
LinkedList<String>();
queue.offer(
"Hello"
);
queue.offer(
"World!"
);
queue.offer(
"你好?"
);
System.out.println(queue.size());
for
(String str:queue){
System.out.printf(str +
" "
);
}
System.out.printf(
"\n"
);
System.out.println(queue.size());
String str;
while
((str=queue.poll()) !=
null
){
System.out.printf(str +
" "
);
}
System.out.println();
System.out.println(queue.size());
|
输出结果:
1
2
3
4
5
|
3
Hello World ! 你好?
3
Hello World ! 你好?
0
|