day14/ListDemo.java

来源:互联网 发布:北京大学网络教学平台 编辑:程序博客网 时间:2024/05/16 16:06
/*Collection|--List:元素是有序的,元素可以重复。因为该集合体系有索引|--ArrayList:底层的数据结构使用的是数组结构。特点:查询快,增删慢。 线程不同步(要加锁才能安全)|--LinkedList底层使用的是链表数据结构。特点:增删快,查询慢。|--Vector:底层是数组数据结构。线程同步。被ArrayList代替了。|--Set:元素是无序的,元素不可以重复。---------------------------------------List:特有的方法。凡是可以操作角标的方法都是该体系特有的方法。增add(index,element);addAll(index,Collection);删remove(index);改set(index,element);查get(index);subList(from,to);listIterator();、----------------------listIterator()List集合特有的迭代器。listIterator是Iterator的子接口。在迭代时,不可通过集合对象的方法操作集合中的元素。因为会发生并发修改异常ConcurrentModificationException所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其它的操作,如添加,修改等,就需要使用其子接口,ListIterator该接口只能通过List集合的listIterator方法获取。*/import java.util.*;class ListDemo {public static void sop(Object obj){System.out.println(obj);}public static void listDemo(){ArrayList al = new ArrayList();//添加元素al.add("java01");al.add("java02");al.add("java03");sop("原集合容器="+al);//指定位置添加元素//al.add(1,"hello");//删除指定位置元素//al.remove(2);//修改指定位置元素//al.set(1,"world");//通过角标获取元素sop(al.get(2));sop(al.subList(2,3));//获取所以容器中所有元素----方法一for(int x=0;x<al.size();x++)sop(al.get(x));//获取所以容器中所有元素----方法二for(Iterator it = al.iterator();it.hasNext();)//Iterator类型的变量it定义在for循环内,循环结束,变量在内存中就释放了{sop(it.next());}//获取所以容器中所有元素----方法三Iterator it = al.iterator();while(it.hasNext()){sop(it.next());}}//-------------------------------//在迭代过程中,准备添加,删除元素等操作,用Iterator的子接口ListIterator,//因为iterator只有hasNext() next()  remove() 三个方法。//如果用iterator迭代时,又使用集合中的方法,就会抛出RuntimeException异常的子类ConcurrentModificationException。public static void listIteratorDemo(){ArrayList al = new ArrayList();al.add("java01");al.add("java02");al.add("java03");sop("原集合容器="+al);ListIterator li = al.listIterator();while(li.hasNext())//从前到后{if(li.next().equals("java02"))//li.add("java009");li.set("java006");}sop(al);while(li.hasPrevious())//迭代器的指针在上个while循环中已经走到末尾,现在从后到前遍历{sop(li.previous());}/*//使用iterator有局限性,只有hasNext() next() remove()三个方法。Iterator it = al.iterator();while(it.hasNext()){if(it.next.equals("java02"))//it.add("java");//如果有这条语句,会抛出ConcurrentModificationException并发修改异常, //因为在迭代时不能使用集合对象的方法it.remove();}*/}public static void main(String[] args) {//listDemo();listIteratorDemo();}}

0 0
原创粉丝点击