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对象  
arrayObj.add( 12 );  
//尝试将整数基元添加到ArrayList  

JVM通过自动装箱将其转换为Integer对象。

ArrayList arrayObj=new ArrayList()//object of ArrayList  
arrayObj(new Integer(12)); 
//将原始整数转换为Integer对象并添加到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  
{  
public static void main(String args[])  
{  
//创建整型数组  
int arr[]=new int[4];  
//adding elements into array   
arr[0]=12;  
arr[1]=2;  
arr[2]=15;  
arr[3]=67;  
for(int i=0;i<arr.length;i++)  
{  
System.out.println(arr[i]);  
}  
}  
}  
Output:
12
2
15
67

Java中ArrayList

import java.util.*;  
public class ArrayListExample  
{   
public static void main(String args[])   
{   
//creating an instance of ArrayList  
List<Float> list = new ArrayList<Float>();   
//adding element to arraylist  
list.add(12.4f);   
list.add(34.6f);   
list.add(56.8f);   
list.add(78.9f);   
//iteration over ArrayList using for-each loop  
for(Float f:list)  
{  
System.out.println(f);   
}  
}   
}  
Output:

12.4
34.6
56.8
78.9