Collection
|-List:元素是有序的,元素可以重复,因为该集合体系有Index(索引)
|-Set:元素是无序的,元素不可以重复
List:
特有方法:凡是可以操作角标 的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);//获取子列表
ListIterator();
代码实现:
import java.util.*;
class ListDemo{
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop("原集合是:"+al);
//在指定位置添加元素
al.add(1,"java9");//相当于插入操作
//删除指定位置的元素
//al.remove(2);
//修改元素
al.set(2,"java007");
//通过角标获取元素
sop("get(1):"+al.get(1));
sop(al);
//获取所有元素
for(int x=0;x<al.size();x++)
sop("al("+x+")="+al.get(x));
Iterator it = al.iterator();
while(it.hasNext())
sop("next="+it.next());
//通过indexOf获取对象的位置
sop("index="+al.indexOf("java2"));
//获取子列表
List sub = al.subList(1,3);//包含1不包含3
sop("sub="+sub);
}
}
结果:
---------------------------------------------
重点:列表迭代器
先从Collection中的迭代器开始说起,接上代码:
import java.util.*;
class ListDemo{
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
//演示列表迭代器
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//在迭代过程中,准备添加或者删除元素
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("java2"))
al.add("java008");
sop("obj="+obj);
}
}
public static void method_1(){
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop("原集合是:"+al);
//在指定位置添加元素
al.add(1,"java9");//相当于插入操作
//删除指定位置的元素
//al.remove(2);
//修改元素
al.set(2,"java007");
//通过角标获取元素
sop("get(1):"+al.get(1));
sop(al);
//获取所有元素
for(int x=0;x<al.size();x++)
sop("al("+x+")="+al.get(x));
Iterator it = al.iterator();
while(it.hasNext())
sop("next="+it.next());
//通过indexOf获取对象的位置
sop("index="+al.indexOf("java2"));
//获取子列表
List sub = al.subList(1,3);//包含1不包含3
sop("sub="+sub);
}
}
结果:
报错了,这种异常叫并发修改异常,原因在于在迭代的过程中,用集合的操作。所以修改成迭代器的操作就可以了,例如修改成下列代码,可是问题又来了,Iterator迭代器有局限性,它只有判断(hasNext()),取出(next())和移除(remove())操作,并没有添加这个操作。
import java.util.*;
class ListDemo{
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
//演示列表迭代器
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//在迭代过程中,准备添加或者删除元素
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("java2"))
it.remove();//将java2的引用从集合中删除了
sop("obj="+obj);
}
sop(al);
}
public static void method_1(){
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop("原集合是:"+al);
//在指定位置添加元素
al.add(1,"java9");//相当于插入操作
//删除指定位置的元素
//al.remove(2);
//修改元素
al.set(2,"java007");
//通过角标获取元素
sop("get(1):"+al.get(1));
sop(al);
//获取所有元素
for(int x=0;x<al.size();x++)
sop("al("+x+")="+al.get(x));
Iterator it = al.iterator();
while(it.hasNext())
sop("next="+it.next());
//通过indexOf获取对象的位置
sop("index="+al.indexOf("java2"));
//获取子列表
List sub = al.subList(1,3);//包含1不包含3
sop("sub="+sub);
}
}
所以为了解决这个局限性的问题,List集合特有的迭代器,ListIterator是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生并发修改异常(ConcurrentModificationException)
如果想要其他的操作:如添加,修改等,就需要使用Iterator的子接口:ListIterator
该接口只能通过List集合的ListIterator方法获取。
演示代码如下:
import java.util.*;
class ListDemo{
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args){
//演示列表迭代器
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop(al);
ListIterator li = al.listIterator();
while(li.hasNext()){
Object obj = li.next();
if(obj.equals("java2"))
li.add("java009");
}
sop(al);
/*
//在迭代过程中,准备添加或者删除元素
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("java2"))
it.remove();//将java2的引用从集合中删除了
sop("obj="+obj);
}
sop(al);
*/
}
public static void method_1(){
ArrayList al = new ArrayList();
//添加元素
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop("原集合是:"+al);
//在指定位置添加元素
al.add(1,"java9");//相当于插入操作
//删除指定位置的元素
//al.remove(2);
//修改元素
al.set(2,"java007");
//通过角标获取元素
sop("get(1):"+al.get(1));
sop(al);
//获取所有元素
for(int x=0;x<al.size();x++)
sop("al("+x+")="+al.get(x));
Iterator it = al.iterator();
while(it.hasNext())
sop("next="+it.next());
//通过indexOf获取对象的位置
sop("index="+al.indexOf("java2"));
//获取子列表
List sub = al.subList(1,3);//包含1不包含3
sop("sub="+sub);
}
}
也可以修改(it.set();)还有一个特殊的方法hasPrevious();