List系列集合

List系列集合特点:有序,可重复,有索引

ArrayList:有序,可重复,有索引

LinkedList:有序,可重复,有索引

(底层实现不同!适合的场景不同!)

List集合的特有方法

1,创建一个ArrayList集合对象(有序,可重复,有索引)

java 复制代码
 List<String> list = new ArrayList<>();//经典代码 List是接口
        list.add("简隋英");
        list.add("李玉");
        list.add("李玉");
        list.add("邵群");
        System.out.println(list);//[简隋英,李玉,李玉,邵群]

2,public void add(int index , E element):在某个索引位置插入元素

java 复制代码
        list.add(2,"李程秀");
        System.out.println(list);//[简隋英,李玉,李程秀,李玉,邵群]

3,public E remove(int index):根据索引删除元素,返回被删除元素

java 复制代码
        System.out.println(list.remove(2));//李程秀
        System.out.println(list);//[简隋英,李玉,李玉,邵群]

4,public E get(int index):返回集合中指定位置的元素

java 复制代码
System.out.println(list.get(0));//简隋英

5,public E set(int index , E element):修改索引位置处的元素,修改成功后,会返回原来的数据

java 复制代码
        System.out.println(list.set(2, "李程秀"));
        System.out.println(list);//[简隋英,李玉,李程秀,邵群]

List集合支持的遍历方式

1,for循环(因为List集合有索引)

java 复制代码
import java.util.*;

public class Work1 {
    public static void main(String[] args)  {
        List<String> list = new ArrayList<>();//经典代码 List是接口
        list.add("兰波");
        list.add("白楚年");
        list.add("陆言");
        list.add("毕揽星");
        //System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }

2,迭代器

java 复制代码
         Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

3,增强for循环

java 复制代码
        for (String s : list) {
            System.out.println(s);
        }

4,Lambda表达式

java 复制代码
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
    }
}

ArrayList集合的底层原理

基于数组实现的

查询速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同

删除效率低:可能需要把后面很多的数据进行前移

添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容

ArrayList集合适合的应用场景

LinkedList集合的底层原理

基于双链表实现的

LinkedList的应用场景之一:可以用来设计队

java 复制代码
import java.util.*;

public class Work1 {
    public static void main(String[] args)  {
        //创建一个队列
        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());
    }
}

LinkedList的应用场景之一:可以用来设计栈

java 复制代码
import java.util.*;

public class Work1 {
    public static void main(String[] args)  {
        LinkedList<String> stack = new LinkedList<>();
        //压栈(push)
        stack.addFirst("第1颗子弹");
        stack.addFirst("第2颗子弹");
        stack.addFirst("第3颗子弹");
        stack.addFirst("第4颗子弹");
        System.out.println(stack);
        //出栈(pop)
        System.out.println(stack.removeFirst());
        System.out.println(stack.removeFirst());
        System.out.println(stack);
    }
}
相关推荐
hold?fish:palm15 分钟前
30 两两交换链表中的节点
数据结构·算法·链表
kkkkkkkkkk_Z33 分钟前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
不正经学生44 分钟前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
程与留2 小时前
06_Qt 常用数据类型与容器:QString、QList、QVector、QMap 的性能与实现分析
数据结构·qt
林森lsjs2 小时前
队列 FIFO 原理 & 手撕两种队列实现(链表 + 循环数组)—数据结构陆
java·开发语言·数据结构·队列
H_oRIZoN_2 小时前
Linux入门DAY23(C语言树形结构)
linux·c语言·数据结构
间歇性努力持续性发呆的野生快乐选手3 小时前
stl容器使用和算法简介
数据结构·c++
重生之后端学习6 小时前
15. 三数之和[中等]✅
java·数据结构·算法·leetcode·职场和发展
疯狂打码的少年7 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
Nil2087 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode