集合类的由来:
对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储。
集合特点:
1,用于存储对象的容器。(存的是对象的地址)
2,集合的长度是可变的。
3,集合中不可以存储基本数据类型值。 (只能存对象)
Collection子接口
Collection接口
|--List接口:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
|--Set接口:无序,元素不能重复。
List
有一个共性特点就是都可以操作角标,list集合可以完成对元素的增删改查。
Iterator接口
对 collection 进行迭代的迭代器,即对所有的Collection容器进行元素取出的公共接口。
该迭代器对象必须依赖于具体容器,因为每一个容器的数据结构都不同,所以该迭代器对象是在具体容器中进行内部实现的。(内部类,可以看具体容器的源码)
对于使用容器者而言,具体的实现方法不重要,只要通过具体容器获取到该实现的迭代器的对象即可,也就是iterator方法,而不用new。(Iterator<String> ite=list.iterator();)
小知识:使用迭代器过程中while和for的区别
1 第一种 2 Iterator<String> ite=list.iterator(); 3 while(ite.hasNext())//判断下一个元素之后有值 4 { 5 System.out.println(ite.next()); 6 } 7 第二种 8 Iterator<String> ite=list.iterator(); 9 for(Iterator it = coll.iterator(); it.hasNext(); ){ 10 System.out.println(it.next()); 11 }
第一种方法while循环结束后迭代器对象还在内存中存在,还能继续使用迭代器对象。
第二种方法for循环结束后迭代器对象就消失了,清理了内存,开发中第二种常用。
Iterator子接口
|--ListIterator接口(列表迭代器)
适用情况例子:(出现ConcurrentModificationException异常时)
出现异常情况代码:
Iterator it = list.iterator(); while(it.hasNext()){ Object obj = it.next();//java.util.ConcurrentModificationException //在使用迭代器的过程中使用集合操作元素,容易出现异常。 //可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。 if(obj.equals("abc2")){ list.add("abc9"); } else System.out.println("next:"+obj); } System.out.println(list);
解决办法代码:
public static void main(String[] args) { List list = new ArrayList(); list.add("abc1"); list.add("abc2"); list.add("abc3"); System.out.println("list:"+list); ListIterator it = list.listIterator();//获取列表迭代器对象 //它可以实现在迭代过程中完成对元素的增删改查。 //注意:只有list集合具备该迭代功能. while(it.hasNext()){ Object obj = it.next(); if(obj.equals("abc2")){ it.add("abc9"); //ListIterator提供了add方法 } }
时间: 2024-10-19 02:14:55