package com.sky.arrayset;
//ArrayList、Vector和LinkedList
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Stack;
import java.util.Vector;
/**
* 演示各种List的使用
* @author sky
*List能维护元素的次序,它允许元素重复
*/
public abstract class TestList {
/**初始化一个List*/
public static void init(List list){
if(list!=null){
list.add("aaa");
list.add("ccc");
list.add("bbb");
list.add("eee");
list.add("ddd");
}
}
/**输出List的内容*/
public static void output(List list){
if(list!=null){
//根据列表下标遍历,使用list.size()获取列表中元素的个数
for(int i=0;i<list.size();i++){
System.out.println("\n\t遍历list:"+list.get(i));
}
//或者用迭代器遍历
Iterator it=list.iterator();
Object value=null;
while(it.hasNext()){
value=it.next();
}
}
System.out.println();
}
/**使用ArrayList*/
public static void testArrayList(){
List list=new ArrayList();
init(list);
System.out.println("\n\t使用ArrayList:");
output(list);
}
/**使用Vector*/
public static void testVector(){
List list=new Vector();
init(list);
System.out.println("\n\t使用Vector:");
output(list);
}
/**使用LinkedList*/
public static void testLinkedList(){
List list=new LinkedList();
init(list);
System.out.println("\n\t使用LinkedList");
output(list);
}
public static void main(String[] args){
TestList.testArrayList();
TestList.testVector();
TestList.testLinkedList();
List list=new ArrayList();
init(list);
//List支持元素重复
list.add("aaa");
list.add("bbb");
System.out.println("\n\t插入原aaa,bbb后:");
output(list);
//指定元素出入的位置
list.add(1, "fff");
System.out.println("在下标为1处插入fff后:");
output(list);
List list2=new ArrayList();
list2.add("ggg");
list2.add("hhh");
//将另一个列表中的元素插入到列表中
list.addAll(list2);
System.out.println("添加list2大元素后:");
output(list);
//判断列表是否包含某一元素
//通过元素的equals方法,判断元素是否相等
System.out.println("\n\t list包含aaa?"+list.contains("aaa"));
//判断列表中是否包含了另一个列表中的所有元素
System.out.println("\n\t list包含list2中的所有元素?"+list.containsAll(list2));
//定位一个元素在列表中最先出现的位置
System.out.println("\n\t aaa在list中第一次出现的位置:"+list.indexOf("aaa"));
//定位一个元素在列表中最后出现的位置
System.out.println("\n\t aaa在list中最后一次出现的位置:"+list.lastIndexOf("aaa"));
//更新列表中某个位置的元素值
list.set(2, "xxx");
System.out.println("\n\t更新位置为2的元素为xxx后:");
output(list);
//删除列表中的某个元素,只删除第一次出现的出现的那个
list.remove("aaa");
System.out.println("\n\t删除元素aaa后");
output(list);
//删除列表中指定的位置的元素
list.remove(1);
System.out.println("\n\t删除下标为1的元素后");
output(list);
//删除列表中其他元素,只保留另一个列表中包含的元素
list.retainAll(list2);
System.out.println("\n\t删除list2包含以外的元素后");
output(list);
//删除列表中在另一个列表中也包含了的元素
list.removeAll(list2);
System.out.println("\n\t删除list2包含的元素后:");
output(list);
list.clear();//清空列表
//判断列表是否有数据
System.out.println("\n\t清空List后,list为空吗?"+list.isEmpty());
init(list);
//用列表中的某些元素构造一个新的列表
list2=list.subList(1, 3);
System.out.println("\n\t用list的第1个到第3个元素构造一个新的List:");
output(list2);
//用List特有的遍历器ListIterator遍历列表
//与普通的Iterator不用,它允许从两个方向遍历列表
ListIterator listIt=list.listIterator();
System.out.println("\n\t正向遍历列表");
while(listIt.hasNext()){
System.out.println("\n\t正向遍历列表 :"+listIt.next());
}
System.out.println("\n\t");
System.out.println("\n\t反向遍历列表");
while(listIt.hasPrevious()){
System.out.println("\n\t反向遍历列表:"+listIt.previous());
}
System.out.println();
//也可以使用ListIterator从list中间插入和删除元素
//只能在遍历当前位置进行添加和删除
listIt.add("newadd");
System.out.println("\n\t用ListIterator往列表中添加的元素newadd后:");
output(list);
listIt.next();
listIt.remove();
System.out.println("\n\t用ListIterator删除列表中元素后:");
output(list);
LinkedList linklist=new LinkedList();
init(linklist);
//添加元素到列表表头
linklist.addFirst("fff");
System.out.println("把fff放到列表表头后:");
output(linklist);
//添加元素到表尾
linklist.addLast("eee");
System.out.println("把eee放到列表尾后:");
output(linklist);
System.out.println("\n\t列表头元素:"+linklist.getFirst());
System.out.println("\n\t列表尾元素:"+linklist.getLast());
linklist.removeFirst();//删除列表表头的元素
System.out.println("删除列表头元素后:");
output(linklist);
linklist.removeLast();//删除列表尾的元素
System.out.println("删除列表的尾元素后:");
output(linklist);
Stack myStack=new Stack();
//插入元素,是插入到尾部
myStack.push("aaa");
myStack.push("bbb");
myStack.push("ccc");
myStack.push("ddd");
myStack.push("aaa");
myStack.push("ddd");
System.out.println("\n\t堆栈中的元素师:");
output(myStack);
System.out.println("\n\t堆栈尾部的元素:"+myStack.peek());
System.out.println("\n\t堆栈头部的元素:"+myStack.pop());
}
}