package com.newedu.jb.day17.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 集合接口List:
* 特点:
* 1:有序集合(有序列表),存取有序
* 2:允许重复元素
* 3:允许有null存在,并且可以有多个null值存在。
*
*List接口 继承自 Collection接口,List接口就自然的包含了Collection接口中的所有方法(约定)
*
* 举例说明:
* 字符串类型的遍历
* 自定义类型的遍历
*@author jerry
*
*/
public class ListDemo {
publicstatic void main(String[] args) {
//第一步:创建集合对象
Listlist = new ArrayList();
//第二步:创建集合元素
Stringstr1 = "jerry";
Stringstr2 = "susan";
Stringstr3 = "peter";
Stringstr4 = "jerry";//重复元素
Stringstr5 = null;//允许为空
Stringstr6 = null;//允许为空
//第三步:向集合中添加元素
list.add(str2);
list.add(str1);
list.add(str3);
list.add(str4);
list.add(str5);
list.add(str6);
//第四步:遍历集合
Iteratoriter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
System.out.println("================");
//list遍历自定义对象 Student
Listlist1 = new ArrayList();
Studentstu1 = new Student("jerry",20);
Studentstu2 = new Student("susan",19);
Studentstu3 = new Student("peter",21);
Studentstu4 = null;
list1.add(stu1);
list1.add(stu2);
list1.add(stu3);
list1.add(stu4);
Iteratoriter1 = list1.iterator();
while(iter1.hasNext()){
Studentstu = (Student)iter1.next();
if(stu!=null){
System.out.println(stu.getName()+"=="+stu.getAge());
}else{
System.out.println("值为空");
}
}
}
}
package com.newedu.jb.day17.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* 集合接口List:
* 特点:
* 1:有序集合(有序列表),存取有序
* 2:允许重复元素
* 3:允许有null存在,并且可以有多个null值存在。
*
*List接口 继承自 Collection接口,List接口就自然的包含了Collection接口中的所有方法(约定)
*
*
* 成员方法:
*add(),remove(),iterator();contains();clear();isEmpty();size();
* 除了Collection接口之外的成员方法:
* voidadd(int index,Object element):在指定的索引位置,添加集合元素
* Object remove(int index):从集合中移除指定索引位置的元素,返回值为当前删除的元素。
* Object get(int index):返回指定索引位置的元素
* Object set(int index,Object element):update 更新 ;更新指定索引位置的元素
* ListIterator listIterator():返回List特有的列表迭代器(是迭代器的子接口)
*
*@author jerry
*
*/
public class ListDemo2 {
publicstatic void main(String[] args) {
//第一步:创建集合对象
Listlist = new ArrayList();
//第二步:创建集合元素
Stringstr1 = "jerry";
Stringstr2 = "susan";
Stringstr3 = "peter";
Stringstr4 = "jerry";//重复元素
Stringstr5 = null;//允许为空
Stringstr6 = null;//允许为空
//第三步:向集合中添加元素
list.add("jerry");
list.add(0,"susan");//在0个索引位置添加一个元素。
list.add(0,"peter");//在0个索引位置添加一个元素。
//remove(index,object);
Objectrev = list.remove(1);//susan
System.out.println("移除的对象:"+rev);
//get(index);返回元素
Objectobj = list.get(1);//"jerry"
System.out.println("get(1)="+obj);
//set(index,object);更新元素呢
Objectset = list.set(1, "william");
System.out.println("被更新的对象(old值):"+set);
System.out.println("=======遍历集合=======");
//第四步:遍历集合
Iteratoriter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
/**
* peter
* william
*/
System.out.println("=========================");
//演示列表迭代器的特有方法
/**
* boolean hasPrevious():判断是否可以有上一个集合元素
* Object previous():上一个元素
*
* void remove():通过迭代器来移除集合中的元素;与集合中的成员方法remove()是不一样的。
* Object set(Object): 通过迭代器来更新集合中的元素,与集合中的成员方法set()是不一样的。
*/
ListIteratorlistIter = list.listIterator();
//顺序迭代 next()
while(listIter.hasNext()){
System.out.println("顺序迭代:"+listIter.next());
}
//逆序迭代 previous()
while(listIter.hasPrevious()){
System.out.println("逆序迭代:"+listIter.previous());
}
}
}
package com.newedu.jb.day17.collection;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
*List 集合中的元素的删除和更新的问题:
*
* 代码演示: 1:通过集合本身的成员方法 操作元素 Object remove(int) 和 Ojbect set(int,Object) 2:
* 通过列表迭代器来操作元素(删除,更新)void remove() 和 voidset(Object);
*
*@author jerry
*
*/
public class ListDemo3 {
publicstatic void main(String[] args) {
//第一步:创建集合对象
Listlist = new ArrayList();
//第二步:创建集合元素
Stringstr1 = "jerry";
Stringstr2 = "susan";
Stringstr3 = "peter";
Stringstr4 = "jerry";// 重复元素
Stringstr5 = null;// 允许为空
Stringstr6 = null;// 允许为空
//第三步:向集合中添加元素
list.add("jerry");
list.add(0,"susan");// 在0个索引位置添加一个元素。
list.add(0,"peter");// 在0个索引位置添加一个元素。
//Object rev = list.remove(1);
//System.out.println("删除的对象:"+rev);
//
//Object set = list.set(1, "william");
//
第四步:遍历集合
//
//ListIterator listIter = list.listIterator();
//
//while(listIter.hasNext()){
//System.out.println(listIter.next());
//}
//通过迭代器操作 remove();
ListIteratorlistIter = list.listIterator();
while(listIter.hasNext()) {
Stringstr = (String) listIter.next();//抛
if(str.equals("susan")) {
//通过迭代器来删除
listIter.remove();
//通过集合的成员方法来删除
// list.remove(str);
/**
* ConcurrentModificationException 异常:
* 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
* 现象:当通过迭代器来迭代元素的过程中,又通过 集合的成员方法来修改(删除or 更新)
* 此时,会抛出ConcurrentModificationException异常。
*
* 原因: expectedModCount与 modCount一致了,导致再次调用next()方法,抛出异常
*
*
* 解决方法:在修改集合的时候,既可以通过集合的成员方法来实现,也可以通过迭代器来实现。
* 但是两种方式不能混用。
* 面试题:
* 写java代码吗?做过项目吗?你在最近的项目中,有没有遇到异常,什么异常?你是怎么解决的?
*/
}
}
//再次遍历集合
while(listIter.hasPrevious()) {
System.out.println(listIter.previous());
}
}
}
题型:
package com.newedu.jb.day18.list;
import java.util.ArrayList;
/**
* 集合的嵌套遍历
*
* 拿ArrayList举例:
*
* ArrayList<ArrayList<String>>
* @author jerry
*
*/
public class NestListDemo {
public static void main(String[] args) {
// jdk 1.7 的类型推断
ArrayList<ArrayList<String>> list = new ArrayList<>();
// 第二步:创建集合元素 ArrayList<String>
ArrayList<String> a1 = new ArrayList<String>();
a1.add("jerry");
a1.add("susan");
ArrayList<String> a2 = new ArrayList<String>();
a2.add("peter");
a2.add("william");
//第三步:向集合中添加元素
list.add(a1);
list.add(a2);
//第四步:遍历集合
for( ArrayList<String> item : list){
System.out.println("集合的元素:"+item);
for(String str :item){
System.out.println("内层的集合元素:"+str);
}
}
}
}