List:
元素是有序的,元素可以重复。因为该集合体系系有索引。
ArrayList : 底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
LInkedList: 底层使用的是链表结构。特点:增删很快,但是查询稍慢。
Vector : 底层是数组数据结构。线程不同步.
特有方法:
增
add(index, Collection);
addAll(index, Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
ListIterator:
List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生并发异常。所以在迭代时只能用使用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要进行其他的操作,如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的Iterator方法获取。
public static void listDemo()
{
for(ListIterator li = al.ListIterator; li = al.hasNext();)
{
Object obj = li.next();
if(obj.equals("java02"));
li.add("java009");
li.set("java006");
}
}
LinkedList:特有方法:
添加:
addFrist();
addLase();
获取元素,但是不删除元素。如果集合中没有元素,会出现NoSuchElementException
getFirst();
getLast();
获取元素,但是元素被删除。如果集合没有元素会出现NoSuchElementException 。
removeFirst();
removeLast();
在JDK1.6出现替代方法。
添加:
offerFirst();
offerLast();
获取元素,但是不删除元素。如果集合中没有元素,会出现null
peekFirst();
peekLast();
获取元素,但是删除元素。如果集合中没有元素,会出现null
pollFirst()
pollLast();
Test
使用LinkedList模拟一个堆栈或者队列结构。
堆栈: 先进后出 。 队列:先进先出。
import java.util.*;
class DuiLie
{
private LinkedList link;
DuiLie()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addFirst(obj);
}
public Object myGet()
{
return link.removeLast();
}
public boolean isNull()
{
return link.isEmpty();
}
}
class LinkedListTest
{
public static void main(String[] args)
{
DuiLie dl = new DuiLie();
dl.myAdd("java01");
dl.myAdd("java02");
dl.myAdd("java03");
dl.myAdd("java04");
dl.myAdd("java05");
while (!dl.isNull())
{
System.out.println(dl.myGet);
}
}
去除ArrayList中元素重复的问题
public static ArrayList singleElement(ArrayList al)
{
//定义临时容器
ArrayList newAl = new ArrayList();
for (Iterator it=al.iterator();it.hasNext() ; )
{
Object obj = it.next();
if(! newAl.contains(obj))
newAl.add(obj);
}
return newAl
}