List系列集合

本文详细介绍了Java中的List集合(包括ArrayList和LinkedList)特点,如有序、可重复、索引操作,以及遍历方法(for循环、迭代器、增强for和Lambda表达式)。同时讨论了并发修改时可能出现的问题及解决方案,以及ArrayList和LinkedList在不同场景下的适用性。
摘要由CSDN通过智能技术生成

1.List集合的特点

 有序,可重复,有索引

2.List的特有方法(基于index)

//创建一个ArrayList集合
        //list有序,可重复的有索引的
        List<String > list=new ArrayList<>();//这是一行经典代码
        //添加元素
        list.add("Java");
        list.add("Java");
        list.add("张三");
        list.add("李四");
        //添加元素
        list.add(2,"html" );
        System.out.println(list);
        //删除指定索引的元素,将返回删除的值
        System.out.println(list.remove(2));
        System.out.println(list);
        //根据索引返回指定元素
        System.out.println(list.get(2));
        //修改指定索引位置的元素,返回修改前的值
        System.out.println(list.set(1, "aaaa"));//Java
        System.out.println(list);//[Java, aaaa, 张三, 李四]

3.List的循环遍历(多一个for循环遍历方法)

  //list有序,可重复的有索引的
        List<String > lists=new ArrayList<>();//这是一行经典代码
        //添加元素
        lists.add("Java");
        lists.add("Java");
        lists.add("张三");
        lists.add("李四");
        //for循环
        for (int i = 0; i < lists.size(); i++) {
            System.out.println(lists.get(i));
        }
        //迭代器遍历list数组
        Iterator<String> it=lists.iterator();
        while (it.hasNext()){
            String ele=it.next();
            System.out.println(ele);
        }
        //增强for
        for (String ele : lists) {
            System.out.println(ele);
        }
        //JDK1.8开始后的Lambda表达式
        lists.forEach(s->System.out.println(s));

存在问题:当我们从集合中找到元素并删除时,可能会出现并发修改异常问题

哪些遍历存在问题?

  • 迭代器遍历集合且直接用集合删除元素的时候可能出现
  • 增强for循环遍历集合且直接删除集合元素的时候可能出现 

那种遍历且删除不会出现问题?

  • 迭代器遍历结合且用迭代器自己的删除方法操作可以解决
  • 使用for循环遍历并删除元素不会存在问题 

4.ArrayList

特点:ArrayList底层数据结构是数组实现的,查询较快,增删较慢;

5.LinkedList 

特点:底层是基于双链表的数据结构,查询速度比较慢,增删首尾比较快;

  //Linked可以完成栈结构(双链表),队列结构
        //栈
        LinkedList<String> stack=new LinkedList<>();
        //压栈 入栈
        stack.push("第1颗子弹");
        stack.push("第2颗子弹");
        stack.push("第3颗子弹");
        stack.push("第4颗子弹");
        System.out.println(stack);
        //出栈 弹栈
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack);

        //队列
        LinkedList<String> queue=new LinkedList<>();
        //入列
        queue.addLast("第1个学生");
        queue.addLast("第2个学生");
        queue.addLast("第3个学生");
        queue.addLast("第4个学生");
        //出列
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值