当前位置: 首页 > news >正文

java的arraylist集合

一、ArrayList 是什么?

  • 动态数组:ArrayList 是 Java 中一个可动态调整大小的数组,属于 java.util 包。

  • 与普通数组的区别:普通数组长度固定,而 ArrayList 可以自动扩容。

  • 泛型支持:可以存储任意类型的对象(需指定泛型,如 ArrayList<String>)。


二、基本操作(代码示例)

1. 创建 ArrayList

import java.util.ArrayList;
​
public class Main {public static void main(String[] args) {// 创建一个存储 String 的 ArrayListArrayList<String> names = new ArrayList<>();
​// 创建一个存储 Integer 的 ArrayListArrayList<Integer> numbers = new ArrayList<>();}
}

2. 添加元素

names.add("Alice");   // 添加到末尾
names.add(0, "Bob");  // 在索引 0 处插入
// 现在列表内容:["Bob", "Alice"]

3. 访问元素

String first = names.get(0);  // 获取索引 0 的元素("Bob")

4. 修改元素

names.set(1, "Charlie");  // 将索引 1 改为 "Charlie"
// 现在列表内容:["Bob", "Charlie"]

5. 删除元素

names.remove(0);          // 删除索引 0 的元素("Bob")
names.remove("Charlie");  // 直接删除元素 "Charlie"

6. 获取长度

int size = names.size();  // 当前列表长度

7. 遍历 ArrayList

// 方法 1:普通 for 循环
for (int i = 0; i < names.size(); i++) {System.out.println(names.get(i));
}
​
// 方法 2:增强 for 循环(推荐)
for (String name : names) {System.out.println(name);
}
​
// 方法 3:使用迭代器
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}

三、ArrayList 的特点

  1. 动态扩容:默认初始容量为 10,当元素超过容量时,自动增加 50%(如 10 → 15 → 22 ...)。

  2. 随机访问快:通过索引访问元素的时间复杂度是 O(1)。

  3. 增删元素慢:在中间插入或删除元素需要移动后续元素,时间复杂度 O(n)。


四、常见方法速查表

方法作用
add(E e)添加元素到末尾
add(int index, E e)在指定位置插入元素
get(int index)获取索引处的元素
set(int index, E e)修改索引处的元素
remove(int index)删除索引处的元素
remove(Object o)删除指定元素(首次出现)
size()返回列表长度
contains(Object o)判断是否包含某元素
clear()清空列表

五、使用场景

  • 当需要频繁访问元素,但较少插入/删除时(如缓存数据)。

  • 需要动态调整集合大小时(代替传统数组)。


六、注意事项

  1. 非线程安全:多线程环境下推荐使用 VectorCollections.synchronizedList()

  2. 存储对象类型:只能存储对象(如 IntegerString),不能存储基本类型(如 intchar)。

  3. 初始容量优化:如果预先知道数据量较大,可通过 new ArrayList<>(100) 指定初始容量,减少扩容次数。


七、练习题目

  1. 创建一个存储整数的 ArrayList,添加 10 个随机数,然后计算它们的总和。

  2. 编写一个方法,接收一个 ArrayList<String>,返回所有长度大于 5 的字符串。


如果有任何疑问,或需要更深入的示例,请随时告诉我!我们可以一步步完善你的理解。

在 Java 的 ArrayList 中查找某个数(或对象),可以通过以下几种方法实现:


1. 使用 contains() 方法

判断集合中是否包含指定元素(返回 true/false)。

ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 8, 2, 7));
​
int target = 8;
if (numbers.contains(target)) {System.out.println("找到了 " + target);
} else {System.out.println("没找到 " + target);
}

2. 使用 indexOf() 方法

返回元素在集合中的索引(未找到返回 -1)。

int index = numbers.indexOf(target);
if (index != -1) {System.out.println(target + " 的索引是: " + index);
} else {System.out.println(target + " 不存在");
}

3. 手动遍历查找

如果需自定义查找逻辑(例如找大于某值的数),可以用循环遍历:

boolean found = false;
for (int num : numbers) {if (num == target) {found = true;break;}
}
System.out.println(found ? "存在" : "不存在");

4. 使用 Java 8 Stream API

通过 filterfindFirst 实现更灵活的查找:

Optional<Integer> result = numbers.stream().filter(n -> n == target).findFirst();
​
if (result.isPresent()) {System.out.println("找到了: " + result.get());
} else {System.out.println("没找到");
}

注意事项

  1. 对象比较:如果 ArrayList 存储的是自定义对象(如 Person),需要正确重写 equals() 方法,否则 contains()indexOf() 无法正确比较。

  2. 基本类型:ArrayList 不能直接存储基本类型(如 int),需使用包装类(如 Integer)。

  3. 性能contains()indexOf() 的时间复杂度是 O(n)(需要遍历列表)。


完整示例

import java.util.ArrayList;
import java.util.Arrays;
​
public class Main {public static void main(String[] args) {ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 8, 2, 7));int target = 8;
​// 方法1: contains()System.out.println("是否包含8? " + numbers.contains(target));
​// 方法2: indexOf()int index = numbers.indexOf(target);System.out.println("8的索引是: " + index);
​// 方法3: 遍历for (int num : numbers) {if (num == target) {System.out.println("通过遍历找到8");break;}}}
}

输出结果:

是否包含8? true
8的索引是: 2
通过遍历找到8

如果有其他具体需求(如查找多个符合条件的数),可以进一步优化代码!

相关文章:

  • 基于SpringBoot的家政预约系统
  • 鸿蒙 Background Tasks Kit(后台任务开发服务)
  • 全局配置文件
  • 如何确保低空经济中的数据安全?
  • Flink概述
  • 排序复习/下(C语言版)
  • Scala语言基础与函数式编程详解
  • Web3:Ubuntu系统 使用Docker-compose方式部署blockscout浏览器配置版本-v5.2.3-beta+charts图表
  • Web 技术与 Nginx 网站环境部署
  • 大数据hadoop小文件处理方案
  • CRMEB多商户预约服务上门师傅端
  • 可编辑98页PPT | 某大型制造业数字化转型战略规划项目方案
  • 使用PowerShell备份和还原Windows环境变量
  • vue2.0 组件生命周期
  • MYSQL故障排查和环境优化
  • 学习黑客 PowerShell 详解
  • 远程医疗结合贴肤芯片技术对体育院校学生提升运动表现的路径分析
  • 详解Oracle HASH CHAIN和HASH BUCKET
  • PostgreSQL基本用法
  • 数据分析入门指南:从历史到实践
  • 北美票房|华纳又赢了,《死神来了6》开画远超预期
  • 聘期三年已至:37岁香港青年叶家麟卸任三亚市旅游发展局局长
  • 男子聚餐饮酒后身亡,同桌3人被判赔偿近20万元
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 雅典卫城上空现“巨鞋”形状无人机群,希腊下令彻查
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元