List集合概述和特点
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集合特有的方法
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);
}
}
}
List集合存储学生对象并遍历
需求:创建一个存储对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路:
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);
}
}
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());
}
}
}