List集合概述
有序集合。用户可以精确控制列表中的每一个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素与Set集合不同,列表通常允许重复的元素 List集合特点有序:存储和取出的元素顺序一致可重复:存储的元素可以重复 package List; import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class ListDemo1 { public static void main(String[] args) { //创建一个集合对象 List<String>list =new ArrayList<String>(); //添加元素 list.add("hello"); list.add("world"); list.add("java"); list.add("world");//可重复的 //输出集合对象 // System.out.println(list); //迭代器的方法调用 Iterator<String> it = list.iterator(); while(it.hasNext()) { String s = it.next(); System.out.println(s); } } }List集合特有的方法: void add(int index, E element),在此集合中指定位置插入指定的元素 E remove(int index),删除指定索引处的元素,返回被修改的元素 E set(int index, E element),修改指定索引处的元素,返回被修改的元素 E get(int index)返回被修改的元素
package List; import java.util.List; import java.util.ArrayList; /* * List集合特有的方法: * void add(int index, E element),在此集合中指定位置插入指定的元素 * E remove(int index),删除指定索引处的元素,返回被修改的元素 * E set(int index, E element),修改指定索引处的元素,返回被修改的元素 * E get(int index)返回被修改的元素 * * * */ public class ListDemo02 { public static void main(String[] args) { List <String>list =new ArrayList<String>(); list.add("hello"); list.add("world"); list.add("java"); //void add(int index, E element),在此集合中指定位置插入指定的元素 // list.add(1,"javaee"); //IndexOutOfBoundsException // list.add(11,"javaee"); //E remove(int index),删除指定索引处的元素,返回被修改的元素 //System.out.println(list.remove(1)); //IndexOutOfBoundsException // System.out.println(list.remove(11)); //E set(int index, E element),修改指定索引处的元素,返回被修改的元素 // System.out.println(list.set(1, "javaee")); // System.out.println(list.set(11, "javaee")); //E get(int index)返回被修改的元素 // System.out.println(list.get(0)); //输出集合 // System.out.println(list); //遍历集合 // System.out.println(list.get(0)); // System.out.println(list.get(1)); // System.out.println(list.get(2)); //用for循环改进集合遍历 for(int i=0;i<list.size();i++) { String s = list.get(i); System.out.println(s); } } }思路: 1、创建学生类 2、创建List集合对象 3、创建学生对象 4、把学生添加到集合里 5、遍历集合(迭代器方式,for循环方式)
package List03; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* * 需求:创建一个存储对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合 * 思路: * 1、创建学生类 * 2、创建List集合对象 * 3、创建学生对象 * 4、把学生添加到集合里 * 5、遍历集合(迭代器方式,for循环方式) */ public class ListDemo01 { public static void main(String[] args) { List<Student> list =new ArrayList<Student>(); Student s1 = new Student("小红",30); Student s2 = new Student("小明",20); Student s3 = new Student("小花",10); list.add(s1); list.add(s2); list.add(s3); //遍历集合(迭代器方式) Iterator<Student> it= list.iterator(); while(it.hasNext()) { Student s = it.next(); System.out.println(s.getName()+","+s.getAge()); } System.out.println("----------------"); //遍历集合(for循环方式) for(int i =0;i<list.size();i++) { Student s = list.get(i); System.out.println(s.getName()+","+s.getAge()); } } }并发修改异常
ConcurrentModificationException产生原因
迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取的元素中判断与其修改值和实际修改的值不一致解决方案
用for循环遍历,然后用集合对象做对应的操纵作即可。 package List04; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* * 需求:1、创建List集合对象 * 2、集合中有三个元素 * 3、遍历集合,得到每一个集合,看有没有world这个元素,如果有,我就添加一个javaee元素,请写代码实现。 * ConcurrentModificationException当不允许这样的修改时,可以通过检测到对象的并发修改异常。 */ public class ListDem01 { public static void main(String[] args) { List<String> list =new ArrayList<String>(); list.add("hello"); list.add("world"); list.add("java"); // //遍历集合,得到每一个集合,看有没有world这个元素,如果有,我就添加一个 // Iterator<String> it = list.iterator(); // while(it.hasNext()) { // String s = it.next(); // if(s.equals("world")) { // list.add("javaee"); // } // // } for(int i=0;i<list.size();i++) { String s = list.get(i); if(s.equals("world")) { list.add("javaee"); } } System.out.println(list); } }思路: 1、创建学生类
package ithe; public class Student { private String name; private int age; public Student() { } public Student(String name,int age) { this.name =name; this.age =age; } public String getName(){ return name; } public void setName(String name) { this.name=name; } public void setAge(String age) { this.age=age; } public int getAge(){ return age; } } 2、创建List集合对 象 3、创建学生对象 4、把学生添加到集合里 5、遍历集合 迭代器,集合特有的遍历方式普通for,带有索引的遍历方式增强for:最方便的遍历方式 package ithe; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ListDemo { public static void main(String[] args) { //创建list集合对象 List<Student> list = new ArrayList<>(); //创建学生对象 Student s1 = new Student("小红",10); Student s2 = new Student("小明",20); Student s3 = new Student("小兰",30); //把学生对象添加到集合 list.add(s1); list.add(s2); list.add(s3); //遍历集合 // 一、迭代器,集合特有的遍历方式 Iterator<Student> it = list.iterator(); while(it.hasNext()) { Student s = it.next(); System.out.println(s.getName()+","+s.getAge()); } System.out.println("---------"); //二、普通for,带有索引的遍历方式 for(int i =0;i<list.size();i++) { Student s = list.get(i); System.out.println(s.getName()+","+s.getAge()); } System.out.println("---------"); //增强for:最方便的遍历方式 for(Student s:list) { System.out.println(s.getName()+","+s.getAge()); } } }