1.需求:List集合存储字符串并遍历。
List<String> l=new ArrayList<String>(); //list是一个接口,故用子类实例化
l.add("hello");
l.add("I");
l.add("love");
l.add("you");
Iterator<String> it=l.iterator();
while(it.hasNext())
{
String s = it.next(); //由于上面Iterator处的泛型具体化了,故此处不需强制转换
System.out.println(s);
}
2.List集合的特点: 有序(存储和取出的元素一致),可重复的。
3.List集合的特有功能:
A:添加功能
void add(int index,Object element):在指定位置添加元素
boolean addAll(int index, Collection<? extends E> c) :将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
* B:获取功能
* Object get(int index):获取指定位置的元素
int indexOf(Object o) :返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
int lastIndexOf(Object o) :返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
List<E> subList(int fromIndex,int toIndex) :返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
* C:列表迭代器
* ListIterator listIterator():List集合特有的迭代器,返回此列表元素的列表迭代器(按适当顺序)。
* 该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
*
* 特有功能:
* Object previous():获取上一个元素
* boolean hasPrevious():判断是否有元素
*
* 注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用。
* D:删除功能
* Object remove(int index):根据索引删除元素,返回被删除的元素* E:修改功能
* Object set(int index,Object element):根据索引修改元素,返回被修饰的元素*/
新的遍历方式就是:size()和get()
* 问题?
* 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。*
* ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
* 产生的原因:
* 迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
* 其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
* 如何解决呢?
* A:迭代器迭代元素,迭代器修改元素
* 元素是跟在刚才迭代的元素后面的。
* B:集合遍历元素,集合修改元素(普通for)
* 元素在最后添加的。
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// 方式2:集合遍历元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}