Java :List,LinkedList,ArrayList

文章目录

List常用方法

java 复制代码
//1.创建一个ArrayList集合对象(有序、有索引、可以重复)
List<String> list = new ArrayList<>();
list.add("蜘蛛精");
list.add("至尊宝");
list.add("至尊宝");
list.add("牛夫人"); 
System.out.println(list); //[蜘蛛精, 至尊宝, 至尊宝, 牛夫人]

//2.public void add(int index, E element): 在某个索引位置插入元素
list.add(2, "紫霞仙子");
System.out.println(list); //[蜘蛛精, 至尊宝, 紫霞仙子, 至尊宝, 牛夫人]

//3.public E remove(int index): 根据索引删除元素, 返回被删除的元素
System.out.println(list.remove(2)); //紫霞仙子
System.out.println(list);//[蜘蛛精, 至尊宝, 至尊宝, 牛夫人]

//4.public E get(int index): 返回集合中指定位置的元素
System.out.println(list.get(3));

//5.public E set(int index, E e): 修改索引位置处的元素,修改后,会返回原数据
System.out.println(list.set(3,"牛魔王")); //牛夫人
System.out.println(list); //[蜘蛛精, 至尊宝, 至尊宝, 牛魔王]

List集合的遍历方式

有四种,多了一种可以用索引遍历的方式

普通for循环,迭代器,增强for,forEach

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

        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");


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

        //2. 增强for
        for(String s : list){
            System.out.println(s);
        }

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

        //4. forEach
        list.forEach(s -> System.out.println(s));

    }
}

ArrayList底层的原理

ArrayList集合底层是基于数组结构实现的,也就是说当往集合容器中存储元素时,底层本质上是往数组里存数据

  1. 数组长度不可变,但集合长度可变
    数组不可以扩容,底层是创建一个新的数组,把原数组的所有元素都复制到新数组去

LinkedList底层原理

LinkedList底层是链表结构,双向链表。可以用来设计栈结构,队列结构

常用方法

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

        // LinkedList模拟队列:先进先出
        LinkedList<String> queue = new LinkedList<>();

        // 入队
        queue.addLast("1人");
        queue.addLast("2人");
        queue.addLast("3人");
        queue.addLast("4人");
        System.out.println(queue);

        // 出队
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());

        System.out.println("`````````````````");
        // LinkedList模拟栈:后进先出
        LinkedList<String> stack = new LinkedList<>();

        // 入栈  push = addFirst
        stack.addFirst("1ren");
        stack.addFirst("2ren");
        stack.push("3ren");
        stack.push("4ren");
        System.out.println(stack);


        // 出栈  pop  = removeFirst
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.removeFirst());
        System.out.println(stack.removeFirst());

        System.out.println(stack);
    }
相关推荐
Bazingga18 分钟前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff2 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3272 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar2 小时前
Java封装、继承、多态
java·开发语言
ly76892 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠2 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_307779133 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
奇牙coding3 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
爱读书的小胖3 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
小羊没烦恼!3 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp