List(特有方法、遍历方式、ArrayList底层原理、LinkedList底层原理,二者区别)

List集合

java 复制代码
package com.itheima.demo7list;

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

public class ListDemo1 {
    public static void main(String[] args) {
        //目标:掌握List集合独有的功能
        List<String> list = new ArrayList<>();//一行经典代码  多态

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("java");
        System.out.println(list);//[hello, world, java, java]

        //给第三个位置插入一个数据,唐三
        list.add(2,"唐三");
        System.out.println(list);//[hello, world, 唐三, java, java]

        //删除一个元素hello
        list.remove("hello");
        //list.remove(0);  //按照索引删除
        System.out.println(list);//[world, 唐三, java, java]

        //把world修改为白小纯
        list.set(0,"白小纯");
        System.out.println(list);//[白小纯, 唐三, java, java]

        //获取元素
        String s = list.get(0);
        System.out.println(s);//白小纯
    }
}
java 复制代码
        System.out.println("======================四种遍历方式============================");

        //1、for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        //2、迭代器
        Iterator<String> it = list.iterator();//创建一个迭代器对象
        while (it.hasNext()) //判断集合中是否有元素
        {
            String s1 = it.next();
            System.out.println(s1);
        }

        //3、增强for(迭代器的简化)
        for (String s2 : list) //for(集合元素类型 变量名 : 集合对象)
        {
            System.out.println(s2);
        }

        //4、Lambda表达式
        //未简化形式
//        list.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        list.forEach(s3 -> System.out.println(s3));

ArrayList底层原理

是在第一次添加数据后创建数组,本来是空数组

LinkedList底层原理


双向链表每个节点包括上一个节点地址和下一个节点地址

LinkedList应用场景

1、

java 复制代码
package com.itheima.demo7list;

import java.util.LinkedList;

public class ListDemo2 {
    public static void main(String[] args) {
        //目标:用LinkedList做一个队列对象
        LinkedList<String> queue = new LinkedList<>();//LinkedList的独有功能不能用多态

        //入队
        queue.addLast("凯撒");
        queue.addLast("楚子航");
        queue.addLast("诺诺");
        queue.addLast("路明非");
        System.out.println(queue);//[凯撒, 楚子航, 诺诺, 路明非]

        //出队
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue);//[诺诺, 路明非]
    }
}

2、

java 复制代码
        //做一个栈
        LinkedList<String> stack = new LinkedList<>();
        //压栈
        //stack.push("林动");//也可以用push,包了addFirst的皮
        stack.addFirst("林动");
        stack.addFirst("林貂");
        stack.addFirst("林炎");
        stack.addFirst("大荒囚天指");
        stack.addFirst("紫影九动");
        System.out.println(stack);//[紫影九动, 大荒囚天指, 林炎, 林貂, 林动]

        //弹栈
        System.out.println(stack.pop());////也可以用pop,包了removeFirst的皮
        System.out.println(stack.removeFirst());
        System.out.println(stack.removeFirst());
        System.out.println(stack);//[林炎, 林貂, 林动]

LinkedList小结

增删比较少,查询比较多,用ArrayList,占内存少,用的比较多;

增删相对多,查询少,用LinkedList,比较占内容

相关推荐
凤山老林22 分钟前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
Thinker QAQ1 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
朱涛的自习室1 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
All for pursuit.1 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
霸道流氓气质2 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
AOI小白新手上路2 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
woniu_maggie4 小时前
SAP MDG主数据治理实战:从架构原理到项目实施全解析
后端
xiaoqiMikko4 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
dishugj4 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言