Java基础-List集合


1. List集合特点

有序、可重复、有索引。

2. List集合特有方法

方法说明
void add(int index, E element)在此集合的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index, E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素
E subList(int start, int end)截取集合的指定长度,返回一个新的集合
public static void ListTestAPI() {
        List<String> list = new ArrayList<>();
        list.add("java1");
        list.add("java2");
        list.add("java3");
        list.add("java4");
        list.add("java5");
        System.out.println(list);
        // 1. void add(int index, E element) 在此集合的指定位置插入指定的元素
        list.add(1, "python");
        System.out.println(list);
        // 2. E remove(int index) 删除指定索引处的元素,返回被删除的元素
        list.remove(2);
        System.out.println(list);
        // 3. E set(int index, E element) 修改指定索引处的元素,返回被修改的元素
        list.set(1, "C++");
        System.out.println(list);
        // 4. E get(int index) 返回指定索引处的元素
        System.out.println(list.get(1));
    }

3. List集合遍历方式

  • for循环(索引)
  • 迭代器
  • 增强for
  • Lambda表达式
private static void ListTestErgodic(List<String> list) {
        // 2.1 for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("============");
        // 2.2 迭代器
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        System.out.println("============");
        // 2.3 增强for
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("============");
        // 2.4 Lambda表达式
        list.forEach(System.out::println);
    }

4. List集合的底层原理以及应用场景

4.1 ArrayList底层原理

  • 基于数组实现的
  • 查询速度快(注意:是根据索引查询数据块):查询数据通过地址值和索引定位,查询任意数据耗时相同。
  • 删除效率低:可能需要把后面很多的数据进行前移。
  • 增加效率较低:可能需要把后面很多的数据后移,再增加元素;或者也可能需要进行数组的扩容。

数组结构,查询速度快,增加删除慢

4.2 ArrayList应用场景

  • ArrayList适合:根据索引查询数据,比如根据随机索引取数据(高效)
  • ArrayList不适合:数据量大时,频繁的增加删除数据。

4.3 LinkedList底层原理

  • 链表结构
  • 查询慢,无论查询哪个数据都是从开头开始找。
  • 增加、删除相对较快

在这里插入图片描述

4.3 LinkedList应用场景

  • 设计队列,先进先出,后进后出
public class LinkedListTest {
    public static void main(String[] args) {
        // 1. 创建一个队列
        LinkedList<String> linkedList = new LinkedList<>();
        // 2. 出队
        linkedList.addLast("第一号人");
        linkedList.addLast("第二号人");
        linkedList.addLast("第三号人");
        linkedList.addLast("第四号人");
        System.out.println(linkedList);
        // 3. 出队
        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeFirst());
    }
}
  • 设计栈,先进后出,后进先出
private static void stackScene() {
        // 1. 创建一个栈
        LinkedList<String> linkedList = new LinkedList<>();
        // 2. 压栈(push)
//        linkedList.addFirst("第一颗子弹");
//        linkedList.addFirst("第二颗子弹");
//        linkedList.addFirst("第三颗子弹");
//        linkedList.addFirst("第四颗子弹");
        linkedList.push("第一颗子弹");
        linkedList.push("第二颗子弹");
        linkedList.push("第三颗子弹");
        linkedList.push("第四颗子弹");
        System.out.println(linkedList);
        // 3. 出栈(pop)
//        System.out.println(linkedList.removeFirst());
//        System.out.println(linkedList.removeFirst());
//        System.out.println(linkedList.removeFirst());
//        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.pop());
        System.out.println(linkedList.pop());
        System.out.println(linkedList.pop());
        System.out.println(linkedList.pop());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值