栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

List集合 10/10

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

List集合 10/10

List集合 概述
public interface List extends Collection
  • 有序集合(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

  • 与Set集合不同,列表通常允许重复的元素。

特点:

  • 有序:储存和取出的元素顺序一致

  • 元素可重复

使用方法
List l = new ArrayList();        //以多态的方式创建对象
常用方法
  • 该接口继承至Collection集合,在拥有Collection集合的全部方法的同时:

List 集合特有的方法
​
void add(int Index , E e)          //在指定位置插入指定元素(原有元素之前)
E remove(int Index)                //删除指定索引处的元素,返回被删除的元素
E set(int index,E e)               //修改指定索引处的元素,返回被修改的元素      
E get(int index)                   //返回指定的索引处的值
遍历方法
  • 采用Collection集合中也有的: Iterator() 方法进行遍历

  • 采用set()与get()方法,for循环

//get()方法
for(int i = 0 ; i 
并发修改异常 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
​
public class demo {
    public static void main(String[] args) {
        List list = new ArrayList();
​
        list.add("hello");
        list.add("java");
        list.add("world");
​
        Iterator it = list.listIterator();
​
        while (it.hasNext()){
            String s = it.next();                //ConcurrentModificationException
            if (s.equals("world")){
                list.add("oh");
            }
        }
​
        System.out.println(list);
    }
}
  • ConcurrentModificationException:当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常。

  • 在迭代器迭代对象的时候,不允许修改集合中的元素个数,造成了迭代器获取元素中判断预期修改值和实际修改值不一致(分析源码)

解决方案
  • 用for循环遍历即可

for (int i = 0; i < list.size(); i++) {
    String s = list.get(i);
    if (s.equals("world")){
        list.add("oh");
    }
}
  • 方案二:ListIterator列表迭代器进行add

ListIterator:列表迭代器
  • 通过List集合的listIterator()方法得到,他是List集合中特有的迭代器

public interface ListIterator
extends Iterator
  • 用于允许程序员沿任一方向遍历列表的列表的迭代器,在迭代期间*修改列表,并获取列表中迭代器的当前位置(与Iterator对比的不同之处)

  • 常用方法
voidadd(E e) 将指定的元素插入列表(可选操作)。
booleanhasNext() 返回 true如果遍历正向列表,列表迭代器有多个元素。
booleanhasPrevious() 返回 true如果遍历反向列表,列表迭代器有多个元素。
Enext() 返回列表中的下一个元素,并且前进光标位置。
intnextIndex() 返回随后调用 next()返回的元素的索引。
Eprevious() 返回列表中的上一个元素,并向后移动光标位置。
intpreviousIndex() 返回由后续调用 previous()返回的元素的索引。
voidremove() 从列表中删除由 next()或 previous()返回的最后一个元素(可选操作)。
voidset(E e) 用 指定的元素替换由 next()或 previous()返回的最后一个元素(可选操作)。
使用
Iterator it = list.listIterator();
​
ListIterator lit = list.listIterator();
//正向遍历
while (lit.hasNext()){
    String s = lit.next();
    System.out.println(s);
}
​
//逆向遍历,很少用
while (lit.hasPrevious()){
    String s = lit.previous();
    System.out.println(s);
}
​
//重点掌握,add方法
while (lit.hasNext()){
            String s = lit.next();
            if (s.equals("java")){
                lit.add("oh");     //[hello, java, oh, world]  没有异常
            }
}
  • 使用add在迭代器中添加元素时不会抛出ConcurrentModificationException

增强for循环

作用:简化数组 和Colleciton集合的遍历

  • 使用范围:实现Iterator接口的类的对象

  • JDK 5 之后出现,内部原理是一个Iterator迭代器

格式
int[] arr = {3,2,1,56,77,9}
for(int i ; arr){
    System.out.println(i);
}
for(String s : list ) {
    if (s.equals("hello")){ 
        list.add("oh");          //ConcurrentModificationException,抛出该异常说明内部为迭代器
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号