java中应对动态数据应优先使用arraylist,其封装自动扩容机制,支持泛型、add/remove/size等操作;其次可选可变参数或手动扩容;字符串输入需分割解析后存入arraylist。

Java 中原生数组长度不可变,但实际开发中常需应对数量不确定的输入。关键不是“改数组长度”,而是选对工具、用对时机——多数场景下,用 ArrayList 替代数组最直接有效;少数需底层控制时,才考虑手动扩容或可变参数。
用 ArrayList 处理动态元素增删
这是最常用、最推荐的方式。ArrayList 内部封装了数组+自动扩容逻辑,调用 add()、remove()、size() 等方法即可,无需关心容量细节。
- 声明时指定泛型,如
ArrayList<string></string>或ArrayList<integer></integer>,保障类型安全 - 添加元素用
list.add(item),删除用list.remove(index)或list.remove(object) - 获取当前元素个数用
list.size()(不是length),遍历可用增强 for 循环或 get(i) - 若需转为普通数组,调用
list.toArray(new String[0])即可
用可变参数(varargs)接收不定数量输入
适合方法设计阶段就明确“参数个数不固定”的场景,比如日志打印、数值求和、初始化配置等。
- 语法是
void method(Type... args),args在方法体内就是普通数组 - 调用时可传多个值:
print("a", "b", "c"),也可传已有的数组:print(arr) - 注意:可变参数必须是方法参数列表的最后一个;一个方法最多只能有一个
- 本质是语法糖,编译后仍是数组,不涉及运行时扩容
手动扩容:仅在性能敏感或教学场景下使用
当明确需要复用数组引用、避免集合类开销,或想理解底层机制时,才手动创建更大数组并复制内容。
- 核心操作是
System.arraycopy(src, 0, dst, 0, src.length),比循环赋值高效 - 新数组长度通常按 1.5 倍或固定增量增长,避免频繁扩容
- 记得把旧引用指向新数组:
arr = newArray; - 注意:原数组对象未被修改,只是变量指向了新对象
从字符串解析变长输入:常见交互场景
用户输入(如控制台、文件、HTTP 请求)往往是字符串形式,需先分割再转为结构化数据。
- 用
Scanner.nextLine().split(",")或split("\s+")拆分逗号或空格分隔的字符串 - 对每个子串调用
Integer.parseInt()或Double.parseDouble()转类型 - 结果存入 ArrayList,后续可自由处理;不建议硬编码数组长度去接收
- 注意处理异常,如
NumberFormatException和空字符串
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











