一.List集合的特有功能概述和测试
List集合的特有功能概述
void add(int index,E element) E remove(int index) E get(int index) E set(int index,E element) |
package com.pg.list;
import java.util.ArrayList;
import java.util.List;
public class Demo1_List {
public static void main(String[] args) {
//demo1();
//demo2();
//demo3();
//demo4();
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.set(1, "z"); //将指定位置的元素修改
System.out.println(list);
}
public static void demo4() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//Object obj1 = list.get(2);
//System.out.println(obj1);
//通过索引遍历List集合
for(int i = 0;i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static void demo3() {
List list = new ArrayList();
list.add(111);
list.add(222);
list.add(333);
list.remove(111); //删除的时候不会自动装箱,把111当作索引
System.out.println(list);
}
public static void demo2() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Object obj = list.remove(1); //通过索引删除元素,将被删除的元素返回
System.out.println(obj);
System.out.println(list);
}
public static void demo1() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(4, "f");//index<=size并且index>=0都不会报异常
//list.add(1,"e");
//list.add(10, "z");//java.lang.IndexOutOfBoundsException,当存储时使用不存在的索引时
System.out.println(list);
}
}
二.List集合存储学生对象并遍历
向List集合中存储学生对象,通过size()和get()方法结合使用遍历
package com.heima.list;
import java.util.ArrayList;
import java.util.List;
import com.pg.bean.Student;
public class Demo2_List {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Student("张三", 23));//Object obj = new Student("张三",23);
list.add(new Student("李四", 24));
list.add(new Student("王五", 25));
list.add(new Student("赵六", 26));
for(int i = 0; i < list.size(); i++) {
//System.out.println(list.get(i)); //通过索引获取每一个元素
Student s = (Student)list.get(i);
System.out.println(s.getName() + "..." + s.getAge());
}
}
}
三.并发修改异常产生的原因及解决方案
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
1.ConcurrentModificationException出现
迭代器遍历,集合修改集合
2.解决方案
a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
b:集合遍历元素,集合修改元素
package com.pg.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo3_List {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a"); //Object obj = new String();
list.add("b");
list.add("world");
list.add("c");
list.add("d");
list.add("e");
/*Iterator it = list.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
String str = (String)it.next(); //向下转型
if("world".equals(str)) {
list.add("javaee");//遍历的同时在增加元素,并发修改ConcurrentModificationException
}
}*/
ListIterator lit = list.listIterator();//获取迭代器(List集合特有的)
while(lit.hasNext()) {
String str = (String)lit.next();//向下转型
if("world".equals(str)) {
//list.add("javaee");//遍历的同时在增加元素,并发修改ConcurrentModificationException
lit.add("javaee");
}
}
System.out.println(list);
}
}
四.ListIterator
boolean hasNext()是否有下一个 boolean hasPrevious()是否有前一个 |
package com.pg.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo4_ListIterator {
/**
* @param args
*/
public static void main(String[] args) {
List list = new ArrayList();
list.add("a"); //Object obj = new String();
list.add("b");
list.add("world");
list.add("c");
list.add("d");
list.add("e");
ListIterator lit = list.listIterator(); //获取迭代器
while(lit.hasNext()) {
System.out.println(lit.next()); //获取元素并将指针向后移动
}
System.out.println("-----------------");
while(lit.hasPrevious()) {
System.out.println(lit.previous()); //获取元素并将指针向前移动
}
}
}