15 List类小结

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");
}
}

猜你喜欢

转载自blog.csdn.net/youmingke/article/details/81030814