在Java中数组和集合的主要区别是什么

数组长度固定、支持基本类型且无泛型,操作受限但性能高;集合长度可变、仅存对象并支持泛型,提供丰富API但有额外开销。

数组和集合的主要区别在于长度固定性、类型限制、功能丰富程度以及底层实现机制。 虽然两者都用于存储多个元素,但在实际开发中适用场景不同。

长度是否可变

数组一旦创建,长度就不可改变。你必须在初始化时指定大小,之后无法动态扩容或缩容。
集合的长度是可变的,可以根据需要添加或删除元素。例如ArrayList会自动扩容。

比如:
  • int[] arr = new int[5]; // 长度固定为5
  • List list = new ArrayList(); // 可以add()多次,自动增长

存储类型与泛型支持

数组可以存储基本类型(如int、char)和引用类型。但不支持泛型擦除机制,只能通过声明类型来约束。
集合只能存储引用类型(对象),不能直接存基本类型(需用包装类如Integer)。集合支持泛型,可以在编译期检查类型安全。

例如:
  • String[] strs = new String[10]; // 合法,数组声明字符串类型
  • List strings = new ArrayList(); // 使用泛型限定只能存String

提供的操作方法

数组本身没有内置的方法来添加、删除、查找元素,只能通过下标访问或配合Arrays工具类使用。
集合框架提供了丰富的API,如add、remove、contains、size等,操作更方便灵活。

  • 数组常用:arr.length、Arrays.sort(arr)、Arrays.toString()
  • 集合常用:list.add(e)、set.contains(e)、map.get(key)

性能与内存开

数组由于结构简单,内存占用小,访问速度快(通过索引直接定位)。
集合封装了更多逻辑,有额外的开销(如对象包装、动态扩容判断),但提升了开发效率。

  • 频繁读取、已知数量时优先考虑数组
  • 元素数量不确定、需要频繁增删时选择集合
基本上就这些。数组更底层高效,集合更灵活易用。根据具体需求选择合适的方式。