天天看点

容器类常用方法(2)

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();
	}
}