java毕向东听课笔记22(集合框架-List集合共性方法)
来源:互联网 发布:网络摄像头网线接法 编辑:程序博客网 时间:2024/04/26 23:54
Collection
|-List:元素是有序的,元素可以重复,因为该集合体系有Index(索引)
|-Set:元素是无序的,元素不可以重复
List:
特有方法:凡是可以操作角标 的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);//获取子列表
ListIterator();
代码实现:
import java.util.*;class ListDemo{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args){ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");sop("原集合是:"+al);//在指定位置添加元素al.add(1,"java9");//相当于插入操作//删除指定位置的元素//al.remove(2);//修改元素al.set(2,"java007");//通过角标获取元素sop("get(1):"+al.get(1));sop(al);//获取所有元素for(int x=0;x<al.size();x++)sop("al("+x+")="+al.get(x));Iterator it = al.iterator();while(it.hasNext())sop("next="+it.next());//通过indexOf获取对象的位置sop("index="+al.indexOf("java2"));//获取子列表List sub = al.subList(1,3);//包含1不包含3sop("sub="+sub);}}
结果:
---------------------------------------------
重点:列表迭代器
先从Collection中的迭代器开始说起,接上代码:
import java.util.*;class ListDemo{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args){//演示列表迭代器ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");//在迭代过程中,准备添加或者删除元素Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(obj.equals("java2"))al.add("java008");sop("obj="+obj);}}public static void method_1(){ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");sop("原集合是:"+al);//在指定位置添加元素al.add(1,"java9");//相当于插入操作//删除指定位置的元素//al.remove(2);//修改元素al.set(2,"java007");//通过角标获取元素sop("get(1):"+al.get(1));sop(al);//获取所有元素for(int x=0;x<al.size();x++)sop("al("+x+")="+al.get(x));Iterator it = al.iterator();while(it.hasNext())sop("next="+it.next());//通过indexOf获取对象的位置sop("index="+al.indexOf("java2"));//获取子列表List sub = al.subList(1,3);//包含1不包含3sop("sub="+sub);}}
结果:
报错了,这种异常叫并发修改异常,原因在于在迭代的过程中,用集合的操作。所以修改成迭代器的操作就可以了,例如修改成下列代码,可是问题又来了,Iterator迭代器有局限性,它只有判断(hasNext()),取出(next())和移除(remove())操作,并没有添加这个操作。
import java.util.*;class ListDemo{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args){//演示列表迭代器ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");//在迭代过程中,准备添加或者删除元素Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(obj.equals("java2"))it.remove();//将java2的引用从集合中删除了sop("obj="+obj);}sop(al);}public static void method_1(){ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");sop("原集合是:"+al);//在指定位置添加元素al.add(1,"java9");//相当于插入操作//删除指定位置的元素//al.remove(2);//修改元素al.set(2,"java007");//通过角标获取元素sop("get(1):"+al.get(1));sop(al);//获取所有元素for(int x=0;x<al.size();x++)sop("al("+x+")="+al.get(x));Iterator it = al.iterator();while(it.hasNext())sop("next="+it.next());//通过indexOf获取对象的位置sop("index="+al.indexOf("java2"));//获取子列表List sub = al.subList(1,3);//包含1不包含3sop("sub="+sub);}}
所以为了解决这个局限性的问题,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 main(String[] args){//演示列表迭代器ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");sop(al);ListIterator li = al.listIterator();while(li.hasNext()){Object obj = li.next();if(obj.equals("java2"))li.add("java009");}sop(al);/*//在迭代过程中,准备添加或者删除元素Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(obj.equals("java2"))it.remove();//将java2的引用从集合中删除了sop("obj="+obj);}sop(al);*/}public static void method_1(){ArrayList al = new ArrayList();//添加元素al.add("java1");al.add("java2");al.add("java3");al.add("java4");sop("原集合是:"+al);//在指定位置添加元素al.add(1,"java9");//相当于插入操作//删除指定位置的元素//al.remove(2);//修改元素al.set(2,"java007");//通过角标获取元素sop("get(1):"+al.get(1));sop(al);//获取所有元素for(int x=0;x<al.size();x++)sop("al("+x+")="+al.get(x));Iterator it = al.iterator();while(it.hasNext())sop("next="+it.next());//通过indexOf获取对象的位置sop("index="+al.indexOf("java2"));//获取子列表List sub = al.subList(1,3);//包含1不包含3sop("sub="+sub);}}
也可以修改(it.set();)还有一个特殊的方法hasPrevious();
- java毕向东听课笔记22(集合框架-List集合共性方法)
- java毕向东听课笔记21(集合框架-共性)
- java毕向东听课笔记23(集合框架-List集合具体对象)
- java毕向东听课笔记26(集合框架-泛型)
- java毕向东听课笔记27(集合框架-Map)
- java毕向东听课笔记24(集合框架-Set集合HashSet)
- java毕向东听课笔记25(集合框架-Set集合TreeSet)
- java 集合框架 List集合共性方法
- java基础:集合框架之List(共性方法)
- 集合框架共性方法
- Java---26---List集合共性方法
- JAVA 集合框架 共性方法和迭代器
- Java---25---集合框架共性方法
- List集合共性方法讲解
- List集合共性方法-ListIterator
- 集合框架之List集合共性
- 集合框架(共性方法,迭代器)
- 黑马程序员-List集合共性方法,ListIterator学习笔记
- 关于 csdn 博客添加友情链接~~~~~
- Java HttpPost请求基于apache的httpclient
- Redis 的七个原则,以向大家阐明 Redis 的思想。
- HDU Problem 4883 TIANKENG’s restaurant (区间暴力)
- android中intent传递list或者对象的方法
- java毕向东听课笔记22(集合框架-List集合共性方法)
- sql入门学习2
- 堆栈的区别及增长方向
- 最大连续子序列和
- C# string 对象 0008
- 枚举
- Apache poi操作doc,docx,xsl,xslx文件
- 数据库权限
- Websphere下删除某个文件(ibm-partialapp-delete.props)