List常见方法和遍历操作

List集合的特点

  • 有序: 存和取的元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复

List集合的特有方法

  • Collection的方法List都继承了
  • List集合因为有索引,所以有了很多操作索引的方法
java 复制代码
ublic static void main(String[] args) {
       /*

        List系列集合独有的方法:
            void add(int index,E element)       在此集合中的指定位置插入指定的元素
            E remove(int index)                 删除指定索引处的元素,返回被删除的元素
            E set(int index,E element)          修改指定索引处的元素,返回被修改的元素
            E get(int index)                    返回指定索引处的元素
        */

        //1.创建一个集合
        List<String> list = new ArrayList<>();

        //2.添加元素
        list.add("aaa");
        list.add("bbb");//1
        list.add("ccc");

        //void add(int index,E element)       在此集合中的指定位置插入指定的元素
        //细节:原来索引上的元素会依次往后移
        list.add(1,"QQQ");

        //E remove(int index)                 删除指定索引处的元素,返回被删除的元素
        String remove = list.remove(1);
        System.out.println(remove);//aaa

        //E set(int index,E element)          修改指定索引处的元素,返回被修改的元素
        String result = list.set(0, "QQQ");
        System.out.println(result);

        // E get(int index)                    返回指定索引处的元素
        String s = list.get(0);
        System.out.println(s);

        //3.打印集合
        System.out.println(list);
    }

当我们调用List.remove方法时,回发现有两个参数类型不一样的同名方法:

tips:方法重载调用优先级,优先调用实参和形参类型一致的那个方法。

java 复制代码
 public static void main(String[] args) {

        //List系列集合中的两个删除的方法
        //1.直接删除元素
        //2.通过索引进行删除

        //1.创建集合并添加元素
        List<Integer> list = new ArrayList<>();

        list.add(1);
        list.add(2);
        list.add(3);

        //2.删除元素
        //请问:此时删除的是1这个元素,还是1索引上的元素?
        //为什么?
        //因为在调用方法的时候,如果方法出现了重载现象
        //优先调用,实参跟形参类型一致的那个方法。

        //默认int类型,所有是删除的index
        list.remove(1);
        System.out.println(list);

        //手动装箱,手动把基本数据类型的1,变成Integer类型
        Integer i = Integer.valueOf(1);

        //如果需要使用重载的方法remove(Object o)那需要传入Integer
        list.remove(i);

        System.out.println(list);
    }

List集合的遍历方式

  • 迭代器遍历
  • 列表迭代器遍历
  • 增强for遍历
  • lambda表达式遍历
  • 普通for循环(存在索引)
java 复制代码
 public static void main(String[] args) {
        /*
            List系列集合的五种遍历方式:
                1.迭代器 遍历过程中需要删除元素,用迭代器
                2.列表迭代器 在遍历过程中需要添加元素,用列表迭代器
                3.增强for 仅想遍历,使用增强for或Lambda
                4.Lambda表达式 仅想遍历,使用增强for或Lambda
                5.普通for循环 遍历的时候需要操作索引,使用普通for
         */

        //创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        //1.迭代器
        /*Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }*/

        //2.增强for
        //下面的变量s,其实就是一个第三方的变量而已。
        //在循环的过程中,依次表示集合中的每一个元素
       /* for (String s : list) {
            System.out.println(s);
        }*/

        //3.Lambda表达式
        //forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素
        //并把每一个元素传递给下面的accept方法
        //accept方法的形参s,依次表示集合中的每一个元素
        //list.forEach(s->System.out.println(s) );


        //4.普通for循环
        //size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素
        /*for (int i = 0; i < list.size(); i++) {
            //i:依次表示集合中的每一个索引
            String s = list.get(i);
            System.out.println(s);
        }*/

        // 5.列表迭代器
        //获取一个列表迭代器的对象,里面的指针默认也是指向0索引的
        ListIterator<String> it = list.listIterator();
        //额外添加了一个方法:在遍历的过程中,可以添加元素
        while(it.hasNext()){
            String s = it.next();
            if("bbb".equals(s)){
                //不能使用集合添加,已经被占用了,会报出并发修改异常
                //这个时候应该用列表迭代器添加(额外新增的方法)
                it.add("qqq");
            }
            System.out.println(s);
        }
        System.out.println(list);
    }

五种遍历方式对比:

相关推荐
A XMan.2 小时前
JSON结构快捷转XML结构API集成指南
xml·java·前端·json·php
小林爱2 小时前
【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
android·java·前端·kotlin·intellij-idea·compose·多平台
炸鸡配泡面4 小时前
Qt 12.28 day3
java·开发语言
get_money_4 小时前
代码随想录Day37 动态规划:完全背包理论基础,518.零钱兑换II,本周小结动态规划,377. 组合总和 Ⅳ,70. 爬楼梯(进阶版)。
java·笔记·算法·动态规划
get_money_4 小时前
代码随想录38 322. 零钱兑换,279.完全平方数,本周小结动态规划,139.单词拆分,动态规划:关于多重背包,你该了解这些!背包问题总结篇。
java·开发语言·笔记·算法·动态规划
憶巷6 小时前
设计模式的分类及作用
java·设计模式
向宇it7 小时前
【从零开始入门unity游戏开发之——C#篇36】C#的out协变和in逆变如何解决泛型委托的类型转换问题
java·开发语言·unity·c#·游戏引擎
天空之外1367 小时前
Spring Boot Actuator、Spring Boot Actuator使用、Spring Boot Actuator 监控、Spring程序监控
java·spring boot·spring
baihb10247 小时前
Docker 默认安装位置迁移
java·docker
B1nnnn丶7 小时前
通用导出任何对象列表数据的excel工具类
java·spring boot·excel