Java 中的数组 vs 数组列表
原文:https://www.geeksforgeeks.org/array-vs-arraylist-in-java/
让我们在标题中简单地讨论一下数组和数组列表的概念,以便将 java 程序中的理解融入到它们之间的决定性差异中。众所周知,数组是线性数据结构,提供了在内存地址空间中以连续方式添加元素的功能,而数组列表是属于集合框架的一个类。作为一名优秀的程序员,尽管知道数组和数组之间的区别,但已经知道在数组上使用数组列表。现在,即使使用数组列表,也有一个传递应该存储在数组列表中的元素的数据类型的功能,无论它是对象、字符串、整数、双精度、浮点等。
注:作为旁注,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<Type> al = new ArrayList<Type> ;
// Here Type is the type of elements in ArrayList to be created
注:Java 中的 ArrayList(相当于 C++中的 vector)具有动态大小。它可以根据大小缩小或扩大。ArrayList 是集合框架的一部分,存在于 java.util 包中。
现在让我们借助数组和数组列表之间的差异来举例说明
Base 1: 数组是 Java 提供的基本功能。ArrayList 是 Java 中集合框架的一部分。因此,数组成员是使用[],而数组列表有一组方法来访问和修改元素。
示例:
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));
}
}
Output
1
1
Base 2: 数组是固定大小的数据结构,而 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));
}
}
Output
[1, 2, 3, 4]
[1, 2, 3]
Base 3: 根据数组的定义,数组既可以包含基元数据类型,也可以包含类的对象。但是,数组列表只支持对象条目,不支持基本数据类型。
注意:当我们做 arraylist.add(1)的时候,它会把原始的 int 数据类型转换成 Integer 对象,如下例所示
示例:
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");
}
}
Output
Successfully compiled and executed
Base 4: 由于不能为基元数据类型创建数组列表,数组列表的成员总是对不同内存位置的对象的引用(详见本)。因此,在数组列表中,实际的对象从不存储在连续的位置。实际对象的引用存储在连续的位置。
另一方面,在数组中,它取决于数组是基元类型还是对象类型。在基元类型的情况下,实际值是连续的位置,但是在对象的情况下,分配类似于数组列表。Java ArrayList 支持很多额外的操作,比如 indexOf(), remove() 等。数组不支持这些功能。
我们已经实现并从输出中看到了它们之间的差异。现在让我们以表格的形式画出结论性的差异来总结这篇文章,如下所示:
| [Basic] | array | Array list | | --- | --- | --- | | dimension | It can be one-dimensional or multidimensional. | It can only be one-dimensional | | Traversing element | And For each For is generally used for | The size () method is used to calculate the size of the array list. | | measure | It is static and has a fixed length. | It is dynamic and can be increased or decreased in size when necessary. | | | Faster. The fixed size as shown above. | The speed is relatively slow because of its dynamic nature. | | Raw data type storage | Raw data types can directly store unlikely objects. | Raw data types are not unlikely arrays added directly, but automatic boxing and unboxing. | | Indirect added | | Add element | Assignment operators serve the purpose only. | A special method called add () method is used here. |本文由普拉哈尔·马图尔供稿。如果你喜欢极客博客并想投稿,你也可以写一篇文章并把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果您发现任何不正确的地方,或者您想分享更多关于上面讨论的主题的信息,请写评论
版权属于:月萌API www.moonapi.com,转载请注明出处