List:有序(存入和取出的顺序一致),元素都有索引(角标),允许重复元素。
常用方法:
1、添加
void add(index,element);
void addAll(index,collection);
2、删除
Object remove(index);
3、修改
Object set(index,element);
4、获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
import java.util.ArrayList; import java.util.List; public class ListDemo { public static void main(String[] args) { // TODO Auto-generated method stub List list=new ArrayList(); //添加 list.add("a"); list.add("b"); System.out.println(list); //插入 list.add(2, "c"); System.out.println(list); //删除 list.remove(1); System.out.println(list); //修改元素 System.out.println(list.set(0, "d")); //获取元素 System.out.println(list.get(1)); //获取子列表 System.out.println(list.subList(1, 2)); System.out.println(list); } }
遍历List
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.junit.Test; public class ListDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); System.out.println(list); Iterator it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } @Test //在迭代器过程中,不要使用集合操作元素,容易出现异常:java.util.ConcurrentModificationException。 //可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。 public void test() { List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); System.out.println(list); Iterator it = list.iterator(); while (it.hasNext()) { Object obj=it.next(); if(obj.equals("a")){ list.add("f"); } } System.out.println(list); } }
List:
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢。线程安全
|--ArrayList:内部是数组数据结构,是不同步的,替代了Vector。替代了Vector,查询的速度快。线程不安全
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。线程不安全
LinkedList方法:
addFirst();
addLast();
jdk1.6版本后新方法:
offerFirst();与addFirst方法没有区别。
offerLast();与addLast方法没有区别。
---------------------------------------------------------
getFirst();//获取但不移除,如果链表为空,抛出NoSuchElementException。
getLast();
jdk1.6版本后新方法:
peekFirst();//获取但不移除,如果链表为空,返回null。
peekLast();
--------------------------------------------------------
removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException。
removeLast();
jdk1.6版本后新方法:
pollFirst();//获取并移除,如果链表为空,返回null;
pollLast();