Java List集合:你的数据排队神器

45 阅读3分钟

Java List集合:你的数据排队神器

各位道友们好,我是会编程的吕洞宾!今天咱们来聊聊Java中的List集合——这玩意儿就像是给数据排队的超级管理员,让你的元素乖乖站好,一个接一个!

什么是List?

想象一下排队买仙丹的场景:先来的排前面,后来的排后面,每个人都有自己的固定位置。List就是这样一种有序的集合,它让每个元素都有自己的"编号"(索引),从0开始计数。

两大主力选手

1. ArrayList - 灵活的数组

ArrayList就像是个会自动扩容的智能数组:

List<String> immortalList = new ArrayList<>();
immortalList.add("吕洞宾");
immortalList.add("何仙姑");
immortalList.add("铁拐李");

// 想找谁?直接报位置!
System.out.println(immortalList.get(0)); // 输出:吕洞宾

特点

  • 底层是数组,随机访问超快(就像直接跳到队伍第几个人)
  • 自动扩容,不用担心队伍太长
  • 插入删除中间元素较慢(就像插队会打乱整个队伍)

2. LinkedList - 灵活的链条

LinkedList就像是一串珍珠项链,每个珠子都连着前后:

List<String> fairyList = new LinkedList<>();
fairyList.add("嫦娥");
fairyList.add("玉兔");
fairyList.add("吴刚");

// 在中间插入新元素很快
fairyList.add(1, "八戒"); // 插队到玉兔前面

特点

  • 底层是链表,插入删除超快(就像在项链中间加珠子)
  • 随机访问较慢(要一个个数过去)
  • 适合频繁修改的队列

List的十八般武艺

基本操作演示

List<String> eightImmortals = new ArrayList<>();

// 添加元素
eightImmortals.add("吕洞宾");
eightImmortals.add("钟离权");
eightImmortals.add("蓝采和");

// 获取大小
System.out.println("八仙人数:" + eightImmortals.size());

// 检查是否包含
System.out.println("有吕洞宾吗?" + eightImmortals.contains("吕洞宾"));

// 获取指定位置
System.out.println("第二位是:" + eightImmortals.get(1));

// 修改元素
eightImmortals.set(0, "洞宾吕"); // 改名了!

// 删除元素
eightImmortals.remove("蓝采和"); // 蓝采和去云游了

遍历的三种仙术

方法一:传统for循环

for (int i = 0; i < eightImmortals.size(); i++) {
    System.out.println("第" + i + "位:" + eightImmortals.get(i));
}

方法二:增强for循环

for (String immortal : eightImmortals) {
    System.out.println("仙人:" + immortal);
}

方法三:迭代器

Iterator<String> iterator = eightImmortals.iterator();
while (iterator.hasNext()) {
    System.out.println("仙人:" + iterator.next());
}

实用仙法技巧

批量操作

List<String> newImmortals = Arrays.asList("韩湘子", "曹国舅");
eightImmortals.addAll(newImmortals); // 新仙人加入

// 截取子列表(就像切蛋糕)
List<String> firstTwo = eightImmortals.subList(0, 2);

排序和查找

// 自动排序(按拼音顺序)
Collections.sort(eightImmortals);

// 二分查找(快速定位)
int position = Collections.binarySearch(eightImmortals, "吕洞宾");

实战场景分析

什么时候用ArrayList?

  • 需要频繁按位置访问元素
  • 数据相对稳定,不经常插入删除
  • 就像固定座次的蟠桃会座位表

什么时候用LinkedList?

  • 需要频繁在中间插入删除
  • 主要做队列操作(先进先出)
  • 就像不断有仙人加入退出的云游队伍

避坑指南

常见误区

// 错误示范:在遍历时删除元素
for (String immortal : eightImmortals) {
    if (immortal.equals("蓝采和")) {
        eightImmortals.remove(immortal); // 会报错!
    }
}

// 正确做法:使用迭代器
Iterator<String> iterator = eightImmortals.iterator();
while (iterator.hasNext()) {
    if (iterator.next().equals("蓝采和")) {
        iterator.remove(); // 安全删除
    }
}

性能对比表

操作ArrayListLinkedList
按索引访问⚡️ 超快🐢 较慢
开头插入🐢 较慢⚡️ 超快
中间插入🐢 较慢⚡️ 超快
末尾添加⚡️ 超快⚡️ 超快

总结

List就像是Java世界的排队大师:

  • ArrayList:适合随机访问,就像有固定编号的座位
  • LinkedList:适合频繁修改,就像可以随意调整的珍珠项链

记住选择口诀:查多用ArrayList,改多用LinkedList

下次遇到需要有序存储的数据,就请出我们的List大法吧!保证让你的数据排得整整齐齐,找得又快又准!