11.8 Stack
“ 栈 ” 通常是指“ 后进先出 ” (LIFO)的容器。在编程语言中经常用来对表达式求值。
public class Stack<T> {
private LinkedList<T> storage = new LinkedList<T>();
// 添加元素
public void push(T v) { storage.addFirst(v); }
// 得到栈顶元素
public T peek() { return storage.getFirst(); }
// 删除栈顶元素
public T pop() { return storage.removeFirst(); }
// 判断栈是否为空
public boolean empty() { return storage.isEmpty(); }
public String toString() { return storage.toString(); }
}
11.9 Set
HashSet专门对查找进行了优化。使用了散列。
TreeSet将元素存储在红-黑树数据结构中
11.11 Queue
队列是典型的 “先进先出” (FIFO)的容器。即从容器的一端放入,从另一端取出。并且事物放入容器的顺序与取出的顺序是相同的。
offer():向队列尾部插入元素,或者返回false
11.11.11 PriorityQueue(优先级队列)
队列是先进先出原则的容器。队列中的offer() 方法插入一个对象时,是插在队列尾,而PriorityQueue的offer()方法是在插入时会被排序,默认是使用自然顺序,可以传入Comparator来修改顺序。
PriorityQueue(优先级队列)是排序好的队列(根据Comparator)。
public class PriorityQueueDemo {
public static void main(String args[]) {
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
Random random = new Random(47);
for (int i = 0; i < 10; i++) {
priorityQueue.offer(random.nextInt(i + 10));
}
System.out.println(priorityQueue);
List<Integer> ints = Arrays.asList(25, 22, 20,
18, 14, 9, 3, 1, 1, 2, 3, 9, 14, 18, 21, 23, 25);
priorityQueue = new PriorityQueue<Integer>(ints);
System.out.println(priorityQueue);
priorityQueue = new PriorityQueue<Integer>(
ints.size(), Collections.reverseOrder());
priorityQueue.addAll(ints);
System.out.println(priorityQueue);
String fact = "EDUCATION SHOULD ESCHEW OBFUSCATION";
List<String> strings = Arrays.asList(fact.split(""));
PriorityQueue<String> stringPQ =
new PriorityQueue<String>(strings);
System.out.println(stringPQ);
stringPQ = new PriorityQueue<>(strings.size(),Collections.reverseOrder());
stringPQ.addAll(strings);
System.out.println(stringPQ);
}
}
实现了Iterable的类才可以使用foreach循环(数组除外)
Map 没有实现Iterable因此如果想遍历Map的这么办:
for(Map.Entry entry: System.getenv().entrySet()) {
System.out.println(entry.getKey() + ": " +
entry.getValue());
}