Java知识速记:ArrayList 和 Array

81 阅读3分钟

Java知识速记:ArrayList 和 Array

1. 基本概念

1.1 数组(Array)

数组是Java中的一种数据结构,用于存储固定大小的元素集合。数组在创建时就需定义其大小,并且一旦定义后,大小不可更改。这使得数组在存储相对固定的数量数据时,能够提供较高的访问效率。例如:

int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
// ...

1.2 动态数组(ArrayList)

ArrayList是Java提供的一个可动态伸缩的数组实现,属于Java Collections Framework的一部分。与数组不同,ArrayList的大小不是固定的,可以根据需要自动调整,当元素数量增加时,ArrayList会自动进行扩容。这使得它在处理动态数据时显得更加灵活和便利。示例代码如下:

ArrayList<Integer> numberList = new ArrayList<>();
numberList.add(1);
numberList.add(2);
// ...

2. 存储方式

2.1 数组

数组可以直接存储基本数据类型(如int、char等),也可以存储对象,例如:

String[] names = new String[3];
names[0] = "Alice";

但数组不支持泛型,所以在进行复杂数据结构处理时可能显得局限。

2.2 ArrayList

ArrayList只能存储对象,为了存储基本数据类型,你需要使用对应的包装类(如Integer、Double等)。例如:

ArrayList<Integer> intList = new ArrayList<>();
intList.add(1); // 自动装箱

此外,ArrayList支持泛型,允许你指定存储的元素类型,从而提高安全性和易用性。

3. 性能比较

3.1 访问性能

  • 数组:支持直接索引访问,速度极快,适合需要频繁访问的场合。
  • ArrayList:由于支持动态扩展,访问速度稍慢,但在实际应用中差异不大,适合需要频繁修改的集合。

3.2 内存消耗

  • 数组:创建时需要预先分配内存,存储效率高,但若要增加元素数目,需重新分配内存。
  • ArrayList:会进行动态扩容,可能在内存使用上浪费一些空间,但大大提高了操作的灵活性。

4. 集合功能

4.1 数组

作为一种简单的数据结构,数组不提供任何附加的方法来执行元素的增删改查操作。如果需要这些功能,必须手动编写代码逻辑。

4.2 ArrayList

ArrayList作为集合框架的一部分,提供了丰富的方法,例如添加、删除、查找等,这极大简化了开发者的工作。例如,可以方便地进行搜索和排序操作。

5. 使用场景

5.1 选择数组的场景

  • 元素数量已知且相对固定,且对访问速度要求较高。
  • 实际执行性能要求很高的场合,例如高频率数据处理。

5.2 选择ArrayList的场景

  • 元素数量不确定或经常会变化的场合。
  • 需要频繁进行添加、删除操作。
  • 更倾向于使用集合操作(如排序、查找等)的情况。

结论

属性数组(Array)动态数组(ArrayList)
大小固定动态
访问速度较慢
内存消耗高效较高
添加/删除性能
存储类型基本类型和对象仅支持对象
泛型支持不支持支持
集合功能仅支持基本操作提供丰富的方法
使用场景数据量固定、频繁访问数据量不定、频繁修改