Java中的数组与ArrayList

让我们来讨论这个概念 阵列 ArrayList 在标题中简要介绍了java程序中的理解,随后讨论了它们之间的决定性差异。我们都知道,数组是线性数据结构,提供在内存地址空间中连续添加元素的功能,而ArrayList是属于集合框架的一个类。作为一名优秀的程序员,我们已经知道在数组之上使用ArrayList,尽管我们知道这两者之间的区别。现在,即使使用ArrayList,也有一个功能可以传递应该存储在ArrayList中的元素的数据类型,可以是对象、字符串、整数、双精度、浮点等。

null

注: 作为补充说明,Java中的ArrayList与 C++中的向量 .

创建数组的方法

在Java中,以下是创建数组的两种不同方法。

  1. 简单的固定大小阵列
  2. 动态大小的阵列
int arr[] = new int[10]   

语法: 声明静态数组

它可以进一步定义为两种类型:

  • 类型1 :同时声明和初始化
  • 类型2: 声明而不是稍后初始化元素。

类型1

Type array_name [array_size] ;Type array_name = { Element1, Element2, Element3, Element4,...., ElementN } ;// It is preferable if we have very limited array elements 

类型2

int arr [100] ;// This does means we are declaring a memory block named 'arr' // which is containing continuous 100 block associated in it

注: arr(0)返回数组的第一个元素,所以这确实意味着如果我们试图打印出arr(0),那么我们将得到Element1。这是一个非常重要的声明,在深入理解阵列中的内存存储时,它是可以揭示的。

现在让我们详细讨论ArrayList的下一个概念,如下所示

语法: 宣布成为Arraylist

Arraylist<Type> al = new ArrayList<Type> ;// Here Type is the type of elements in ArrayList to be created

注: Java中的ArrayList(相当于C++中的vector)具有动态大小。它可以根据大小缩小或扩大。ArrayList是集合框架的一部分,存在于 JAVAutil包 .

现在让我们借助Array和ArrayList之间的差异来举例说明

基数1: 数组是Java提供的基本功能。ArrayList是Java中集合框架的一部分。因此,可以使用[]访问数组成员,而ArrayList有一组方法来访问和修改元素。

例子:

JAVA

// Java program to demonstrate differences between
// Array and ArrayList
// Importing required classes
import java.util.ArrayList;
import java.util.Arrays;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Input array
int [] arr = new int [ 2 ];
arr[ 0 ] = 1 ;
arr[ 1 ] = 2 ;
// Printing first element of array
System.out.println(arr[ 0 ]);
// ArrayList
// Creating an arrayList with initial capacity
// say bi it 2
ArrayList<Integer> arrL = new ArrayList<Integer>( 2 );
// Adding elements to ArrayList
// using add() method
arrL.add( 1 );
arrL.add( 2 );
// Printing alongside accessing
// elements of ArrayList
System.out.println(arrL.get( 0 ));
}
}


输出

11

基数2: 数组是固定大小的数据结构,而ArrayList不是。在创建ArrayList对象时,无需提及其大小。即使我们指定了一些初始容量,我们也可以添加更多元素。

例子:

JAVA

// Java program to demonstrate differences between
// Array and ArrayList
// Importing required classes
import java.util.ArrayList;
import java.util.Arrays;
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Normal Array
// Need to specify the size for array
int [] arr = new int [ 3 ];
arr[ 0 ] = 1 ;
arr[ 1 ] = 2 ;
arr[ 2 ] = 3 ;
// We cannot add more elements to array arr[]
// ArrayList
// Need not to specify size
// Declaring an Arraylist of Integer type
ArrayList<Integer> arrL = new ArrayList<Integer>();
// Adding elements to ArrayList object
arrL.add( 1 );
arrL.add( 2 );
arrL.add( 3 );
arrL.add( 4 );
// We can add more elements to arrL
// Print and display Arraylist elements
System.out.println(arrL);
// Print and display array elements
System.out.println(Arrays.toString(arr));
}
}


输出

[1, 2, 3, 4][1, 2, 3]

基数3: 数组既可以包含基元数据类型,也可以包含类的对象,具体取决于数组的定义。但是,ArrayList只支持对象条目,不支持基本数据类型。

注: 当我们做arraylist的时候。add(1)之后,它将原语int数据类型转换为整数对象,如下例所示

例子:

JAVA

import java.util.ArrayList;
class Test
{
public static void main(String args[])
{
// allowed
int [] array = new int [ 3 ];
// allowed, however, need to be initialized
Test[] array1 = new Test[ 3 ];
// not allowed (Uncommenting below line causes
// compiler error)
// ArrayList<char> arrL = new ArrayList<char>();
// Allowed
ArrayList<Integer> arrL1 = new ArrayList<>();
ArrayList<String> arrL2 = new ArrayList<>();
ArrayList<Object> arrL3 = new ArrayList<>();
System.out.println( "Successfully compiled and executed" );
}
}


输出

Successfully compiled and executed

基数4: 由于无法为基本数据类型创建ArrayList,ArrayList的成员始终是对位于不同内存位置的对象的引用(请参见 详细信息)。因此,在ArrayList中,实际对象永远不会存储在相邻的位置。实际对象的引用存储在相邻位置。

另一方面,在数组中,它取决于数组是基元类型还是对象类型。对于基元类型,实际值是连续的位置,但对于对象,分配类似于ArrayList。Java ArrayList支持许多额外的操作,比如indexOf(), 删除() 等。数组不支持这些函数。

我们已经实施并从产出中看到了它们之间的差异。现在,让我们以如下所示的表格形式绘制出结论性差异,以此结束本文:

基础 大堆 ArrayList
维度 它可以是一维的,也可以是多维的 它只能是一维的
遍历元素 For和For-each通常用于对数组进行迭代 这里迭代器用于遍历riverArrayList
length关键字可以给出数组的总大小。 size()方法用于计算ArrayList的大小。
大小 它是静态的,长度固定 它是动态的,可以根据需要增减尺寸。
速度 如上图所示,它的速度更快。我们看到它的大小是固定的 由于其动态特性,速度相对较慢
原始数据类型存储 基本数据类型可以直接存储在不太可能的对象中 基本数据类型不是直接添加到数组中的,而是在自动装箱和取消装箱的帮助下间接添加的
仿制药 它们不能添加到此处,因此类型不安全 可以在此处添加它们,从而使ArrayList类型安全。
添加元素 赋值运算符仅用于此目的 这里使用了一种特殊的方法,称为add()方法

本文由 马图尔夫人 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享