Array和ArrayList的区别
在Java中,数组和ArrayList是众所周知的数据结构。数组是Java提供的基本功能,而ArrayList是Java Collections框架的一类。它属于java.util包。
Java数组
数组是动态创建的对象。它用作保存恒定数量的相同类型值的容器。它有一个连续的内存位置。一旦创建了数组,我们就无法更改其大小。我们可以使用以下语句创建一个数组:
int array[] = new int [大小];
上面的语句创建了一个指定大小的数组。当我们尝试添加超过其大小时,它会抛出ArrayIndexOutOfBoundsException。例如:
int arr[]= new int [ 3 ]; //指定数组大小为3
//向数组中添加4个元素
arr[ 0 ]= 12 ;
arr[ 1 ]= 2 ;
arr[ 2 ]= 15 ;
arr[ 3 ]= 67 ;
Java ArrayList 类
在Java中,ArrayList是Collections框架的一类。它实现了List<E>、Collection<E>、Iterable<E>、Cloneable、Serializable和RandomAccess接口。它扩展了AbstractList<E>类。
我们可以使用以下语句创建 ArrayList 的实例:
ArrayList<T> arrayList= new ArrayList<>();
ArrayList 在 Java 内部由数组支持。ArrayList 中的调整大小操作会降低性能,因为它涉及新数组以及将内容从旧数组复制到新数组。它调用本机实现的方法System.arraycopy(sec, srcPos, dest, destPos, length)。
我们不能在 ArrayList 中存储原始类型。因此,它只存储对象。它自动将原始类型转换为对象。例如,我们创建了一个ArrayList对象,
ArrayList <Integer> list= new ArrayList<Integer>(); //ArrayList对象 |
JVM通过自动装箱将其转换为Integer对象。
ArrayList arrayObj=new ArrayList()//object of ArrayList |
相似之处
- Array 和 ArrayList 都用于存储元素。
- Array 和 ArrayList 都可以存储空值。
- 它们可以有重复的值。
- 它们不保留元素的顺序。
区别:
定义 :
- 数组是动态创建的对象。它用作保存恒定数量的相同类型值的容器。它有一个连续的内存位置。
- ArrayList是Java集合框架的一类。它包含流行的类,如Vector、HashTable和HashMap。
静态/动态:
- 数组的大小是静态的。
- ArrayList 的大小是动态的。
可调整大小:
- 数组是一种固定长度的数据结构。
- ArrayList是一种可变长度的数据结构。它可以在需要时自行调整大小。
初始化 :
- 在直接或间接初始化数组时必须提供数组的大小。
- 我们可以创建 ArrayList 的实例而不指定其大小。Java 创建默认大小的 ArrayList。
性能:
- 由于大小固定,与 ArrayList 相比,数组的执行速度更快。
- ArrayList 在 Java 内部由数组支持。ArrayList 中的调整大小操作会降低性能。
原始/通用类型 :
- 数组可以存储对象和基元类型。
- 我们不能在 ArrayList 中存储原始类型。它自动将原始类型转换为对象。
迭代值 :
- 我们使用for循环或for every循环来迭代数组。
- 我们使用迭代器来迭代 ArrayList。
类型安全 :
- 我们不能将泛型与数组一起使用,因为它不是可转换类型的数组。
- ArrayList 允许我们仅存储泛型/类型,这就是它是类型安全的原因。
长度 :
- Array 提供了一个长度变量,表示数组的长度。
- ArrayList提供了size()方法来确定ArrayList的大小。
添加元素 :
- 我们可以使用赋值运算符在数组中添加元素。
- Java提供了add()方法来添加ArrayList中的元素。
单维/多维
- 数组可以是多维的。
- ArrayList 始终是一维的。
Java数组示例:
public class ArrayExample |
Java中ArrayList
import java.util.*; |