List接口常用方法

List接口和常用方法

常用实现List接口的类有ArrayList、LinkedList、Vector

List集合类中元素添加顺序和取出顺序一致

        List list = new ArrayList();
        list.add("XiAn");
        list.add("BeiJing");
        list.add("ShangHai");
        list.add("XiAn");
        System.out.println("list = " + list);
//输出结果:
//list = [XiAn, BeiJing, ShangHai, XiAn]

list集合中每个元素都有对应的顺序索引,像数组下标

        System.out.println("list[3]="+list.get(3));
//输出结果:
//list[3]=XiAn

1.常用方法

1.1 void add(int index, E element) 添加元素

        list.add(1,"南京");
        System.out.println(list);
//输出结果:
//[XiAn, 南京, BeiJing, ShangHai, XiAn]

参数index可以省略,省略后默认加在最后。

1.2 boolean addAll(int index, Collection c) 添加元素集合

       //创建一个list2,并且录入数据
		List list2 = new ArrayList();
        list2.add("上海");
        list2.add("深圳");
		//将list2中所有内容插入到XiAn后面去
        list.addAll(1,list2);
        System.out.println(list);
//输出结果:
//[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]

参数index可省略,省略后默认加在最后。

1.3 Object get(int index) 获取index位置的元素

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
		//list2=>[上海, 深圳]
		System.out.println(list.get(6));
        System.out.println(list2.get(1));
//输出结果:
//XiAn
//深圳

若超过index实际最大值,会报下标越界错误。

1.4 int indexOf(Object o) 获取元素首次出现的下标

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
		//list2=>[上海, 深圳]
		System.out.println(list.indexOf("XiAn"));
        System.out.println(list2.indexOf("XiAn"));
//输出结果:
// 0
// -1

​ 返回元素o在当前集合中首次出现的位置,没有则返回-1。

1.5 int lastIndexOf(Object o) 获取元素最后一次出现的下标

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
		//list2=>[上海, 深圳]
		System.out.println(list.lastIndexOf("XiAn"));
        System.out.println(list2.lastIndexOf("XiAn"));
//输出结果:
// 6
// -1

​ 若集合中没有该元素返回-1.

1.6 boolean remove(Object o) / E remove(int index)

删除对应元素 / 删除下标对应元素

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]
		list.remove("XiAn");
        list.remove(1);
        System.out.println(list);
//输出结果:
//[上海, 南京, BeiJing, ShangHai, XiAn]

若无对应元素,则集合不做操作 / 若无对应下标,则抛出异常->下标越界

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]        
		list.remove("南海");
        System.out.println(list);
//输出结果:
//[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]

1.7 E set(int index, E element) 将index位置的元素替换为elem

		//list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, XiAn]          
		list.set(1, "成都");
        System.out.println(list);
//输出结果:
//[XiAn, 成都, 深圳, 南京, BeiJing, ShangHai, XiAn]

以该集合为例,参数index必须在0~6之间,不能为7代表着不能插入在最后,否则抛出下标越界

1.8 List subList(int fromIndex, int toIndex)

获取下标范围为 [ fromIndex,toIndex ) 的元素子集

        //list=》[XiAn, 上海, 深圳, 南京, BeiJing, ShangHai, 成都]
		List list3 = list.subList(1,4);
        System.out.println(list3);
//输出结果:
//[上海, 深圳, 南京]

范围为[A,B),则说明toIndex在以该集合为例时最大可以取到7,超出则抛出异常

2. List接口的三种遍历方式

//创建
		List list = new ArrayList();

        list.add("喜羊羊");
        list.add("美羊羊");
        list.add("懒羊羊");

2.1 Interator(迭代器)

        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
//输出结果:
// 喜羊羊
// 美羊羊
// 懒羊羊

​ 若对正在迭代的集合进行操作(add\remove\clear),迭代器就不再合法,此时使用迭代器会抛出ConcurrentModificationException异常。

//错误使用
        List list = new ArrayList();
        Iterator iterator = list.iterator();
        list.add("喜羊羊");
        list.add("美羊羊");
        list.add("懒羊羊");
        while(iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }

​ 若要在迭代时对集合进行删除操作,Iterator接口有自带的remove方法,会移除正迭代的元素。

2.2 增强for

        for (Object o :list) {
            System.out.println(o);
        }

2.3 普通for

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
上一篇:面试题04. 二维数组中的查找


下一篇:leetcode剑指Offer 56-II. 数组中数字出现的次数II Java