Collection接口中的List接口

List

1:

Collection(接口):
    - List 元素有序且允许重复,集合具有索引的概念(接口)
        - ArrayList(具体子类)
    - Set  元素无序且唯一,集合没有索引
package com.shujia.day12;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo1 {
    public static void main(String[] args) {
        //1. 创建集合对象
        List list1 = new ArrayList();

        //2. 创建并添加元素
        list1.add("java");
        list1.add("hadoop");
        list1.add("hive");
        list1.add("hbase");
        list1.add("数据采集");

        //3. 遍历
        Iterator iterator = list1.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}


2:

因为List相关集合具备了索引的概念,所以List集合它里面就会出现与索引相关的方法
List集合中的元素具有有序的特点,这里的有序不是指排序,而是指的是存储和取出的顺序一致。
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
ListIterator listIterator()
package com.shujia.day12;
import java.util.ListIterator;
import java.util.List;
import java.util.ArrayList;

public class ListDemo2 {
    public static void main(String[] args) {
        //创建集合对象
        List list1=new ArrayList();

        list1.add("java");
        list1.add("hadoop");
        list1.add("hive");
        list1.add("apple");

        System.out.println(list1);
        System.out.println("=====================");

        //void add(int index,E element)
        list1.add(1,"mysql");
        System.out.println(list1);
        System.out.println("=====================");

        //E remove(int index) 指定索引删除元素,返回被删除的元素值
//        Object o=list1.remove(10);//IndexOutOfBoundsException
        Object o= list1.remove(2);
        System.out.println(list1);
        System.out.println("=====================");

        //E get(int index) 指定索引获取索引位置上的元素
        Object o1=list1.get(2);
        System.out.println(o1);
        System.out.println("=====================");

        //E set(int index,E element)  通过索引设置元素值,返回的是初始的元素值
        Object o2=list1.set(3,"data");
        System.out.println(o2);
        System.out.println("=====================");

        //ListIterator listIterator()  列表迭代器,List集合特有的迭代器
        ListIterator listIterator= list1.listIterator();
        while(listIterator.hasNext()){
            System.out.println(listIterator.next());
        }

        //无论是ListIterator迭代器,还是Iterator迭代器,指针只有一个,而且最开始的时候,在迭代器的最左边
        //所以要想反向遍历,得先正向遍历一遍,将指针移动到最右边
        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
    }
}

3:

在一个存储字符串的集合中,查找"java"这个元素,如果找到了,就将"flink"添加到集合中,在哪添加无所谓。

ConcurrentModificationException 并发修改异常
原因是,在遍历迭代器的时候,集合的长度发生了变化,而迭代器不知道,长度不一致,报错。
如何避免这样的问题。
迭代器遍历,迭代器修改,集合遍历,集合修改
package com.shujia.day12;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListDemo3 {
    public static void main(String[] args) {
        List list1=new ArrayList();

        list1.add("java");
        list1.add("hadoop");
        list1.add("hive");
        list1.add("apple");

        System.out.println(list1);

        //方式1:
        Object[] arr=list1.toArray();
        for (int i=0;i< arr.length;i++){
            String s=(String) arr[i];
            if ("java".equals(s)){
                list1.add("flink");
            }
        }
        System.out.println(list1);
//        Iterator iterator= list1.iterator();
//        while(iterator.hasNext()){
////            System.out.println(iterator.next());
//            Object next=iterator.next();
//            String s=(String) next;
//            if("java".equals(s)){
//                list1.add("flink");
//            }
//        }
//        System.out.println(list1);

        //方式2:
        ListIterator listIterator= list1.listIterator();
        while (listIterator.hasNext()){
            String s1=(String) listIterator.next();
            if ("hadoop".equals(s1)){
                listIterator.add("maven");//将元素添加到指定元素的后一位
            }
        }
        System.out.println(list1);
    }
}

posted @ 2024-03-06 15:08  peculiar-  阅读(17)  评论(0)    收藏  举报