1. list:在Collection接口上增加大量方法,使得可以在List中间插入和移除元素。
a)ArrayList: 长于随即访问,在List中间插入、删除元素较慢。
b)LinkedList:通过较低的代价在List中间插入、删除元素,提供了优化的顺序访问;在随即访问方面比较慢,实现了更 多的特性方法。
package context;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class TestCollection3 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
for(int i=0; i<5; i++) {
list.add("a" + i);
}
System.out.println(list);
Collections.shuffle(list); //随即排序
System.out.println(list);
List<String> list2 = list.subList(0, 3); //截取子序列
System.out.println(list2);
LinkedList<String> link = new LinkedList<String>(list);
Collections.sort(link);
System.out.println(link);
System.out.println(link.getFirst()); //列表为空NoSuchElementException
System.out.println(link.element());
System.out.println(link.peek()); //列表为空返回null
//addLast add
//removeFirst remove pop
}
}
2. stack:后进先出
Stack
类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
首次创建堆栈时,它不包含项。
Deque
接口及其实现提供了 LIFO 堆栈操作的更完整和更一致的 set,应该优先使用此 set,而非此类。例如:
Deque<Integer> stack = new ArrayDeque<Integer>();
package context;
import java.util.Stack;
public class TestCollection4 {
public static void main(String[] args) {
Stack<String> stack = new Stack<String>();
for(String s : "My dog has fleas".split(" ")) {
stack.push(s);
}
while(!stack.empty()) {
System.out.print(stack.pop() + " ");
}
System.out.println();
}
}
3.set:无序
a)HashSet:对快速查询进行了优化,使用散列函数.
b)TreeSet:使用红黑树数据结构,可排序
c)LinkedHashSet:散列(快速查询)+链表(维护元素的插入顺序)
package context;
import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;
public class TestSet {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<Integer>();
Random rand = new Random(47);
for(int i=0; i<10000; i++) {
set.add(rand.nextInt(30));
}
System.out.println(set);
System.out.println(set.ceiling(12)); //大于等于指定值的最小元素
System.out.println("comparator = " + set.comparator());
Iterator<Integer> i = set.descendingIterator(); //反序迭代器
while(i.hasNext()) {
System.out.print(i.next() + " ");
}
System.out.println();
}
}