让我们来讨论这个概念 阵列 和 ArrayList 在标题中简要介绍了java程序中的理解,随后讨论了它们之间的决定性差异。我们都知道,数组是线性数据结构,提供在内存地址空间中连续添加元素的功能,而ArrayList是属于集合框架的一个类。作为一名优秀的程序员,我们已经知道在数组之上使用ArrayList,尽管我们知道这两者之间的区别。现在,即使使用ArrayList,也有一个功能可以传递应该存储在ArrayList中的元素的数据类型,可以是对象、字符串、整数、双精度、浮点等。
注: 作为补充说明,Java中的ArrayList与 C++中的向量 .
创建数组的方法
在Java中,以下是创建数组的两种不同方法。
- 简单的固定大小阵列
- 动态大小的阵列
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主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论