Java中的Array和ArrayList

Java中的Array和ArrayList

让我们在标题中简要讨论 数组ArrayList 的概念,以后在Java程序中融入理解,然后进一步了解它们之间的区别。我们都知道,数组是提供在内存地址空间中连续添加元素的线性数据结构,而ArrayList是属于集合框架的类。作为一个优秀的编程者,不论知道这两者之间的区别,已经知道如何使用ArrayList而不是数组。即使使用ArrayList,在其中有一种功能,即可以传递数据类型的元素,无论是对象、字符串、整数、双精度浮点数、浮点数等。

注意: Java中的ArrayList可以看作是C++中的vector。

数组的创建方法

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

  1. 简单的固定大小数组
  2. 动态大小数组
int arr[] = new int[10];

语法: 声明静态数组

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

  • 类型1: 声明和初始化同时进行
  • 类型2: 声明后初始化元素。

类型1

Type array_name[array_size];
Type array_name = {  Element1,Element2,Element3,Element4,....,ElementN } ;
//如果我们有非常有限的数组元素,则更好

类型2

int arr [100];
// 这意味着我们声明了一个名为“arr”的内存块,
// 这个内存块包含了连续的100个关联块。

注意: arr(0)返回数组的第一个元素,这意味着如果我们试图打印arr(0),我们将得到Element1。这是非常重要的语句,当深入理解数组中的内存存储时,它不可避免地遗漏了。

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

语法: 声明ArrayList

Arraylist<Type> al = new ArrayList<Type>();
//这里的Type是要创建的ArrayList中元素的类型

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

现在让我们通过Array和ArrayList之间的区别举例说明

基础1: 数组是Java提供的一种基本功能。ArrayList是Java集合框架的一部分。因此,数组成员使用[]访问,而ArrayList具有一组访问元素并修改它们的方法。

例子:

// Java程序演示数组和ArrayList之间的区别。
// 导入所需的类。
import java.util.ArrayList;
import java.util.Arrays;
 
// 主类
class GFG {
   
    // 主驱动方法
    public static void main(String args[])
    {
        // 输入数组
        int[] arr = new int[2];
        arr[0] = 1;
        arr[1] = 2;
 
        // 打印数组的第一个元素
        System.out.println(arr[0]);
 
        // ArrayList
        // 创建一个具有初始容量的arrayList,比如说它为2
        ArrayList<Integer> arrL = new ArrayList<Integer>(2);
 
        // 使用add()方法将元素添加到ArrayList中
        arrL.add(1);
        arrL.add(2);
 
        // 打印并访问ArrayList的元素
        System.out.println(arrL.get(0));
    }
}

输出

1
1

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

示例:

// Java程序演示数组和ArrayList之间的区别。
// 导入所需的类。
import java.util.ArrayList;
import java.util.Arrays;
 
// 主类
class GFG {
    // 主驱动方法
    public static void main(String args[])
    {
        // 普通数组
        // 需要为数组指定大小
        int[] arr = new int[3];
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
 
        // 我们无法向数组arr[]中添加更多的元素
 
        // ArrayList
        // 不需要指定大小
 
        // 声明一个Integer类型的ArrayList
        ArrayList<Integer> arrL = new ArrayList<Integer>();
 
        // 添加元素到ArrayList对象中
        arrL.add(1);
        arrL.add(2);
        arrL.add(3);
        arrL.add(4);
 
        // 我们可以向arrL中添加更多的元素
 
        // 打印和显示Arraylist的元素
        System.out.println(arrL);
        // 打印和显示array的元素
        System.out.println(Arrays.toString(arr));
    }
}

输出

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

基础3: 数组可以包含基本数据类型以及根据数组定义的类的对象。但是,ArrayList只支持对象条目,而不支持基本数据类型。

注意: 当我们执行arraylist.add(1)时,它将基本的int数据类型转换为Integer对象,如下例所示。

示例:

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>();
 
        // 允许以下内容
        ArrayList<Integer> arrL1 = new ArrayList<>();
        ArrayList<String> arrL2 = new ArrayList<>();
        ArrayList<Object> arrL3 = new ArrayList<>();
       
        System.out.println("成功编译并执行");
    }
}

输出

成功编译并执行

基础4: 由于ArrayList无法为原始数据类型创建,因此ArrayList的成员始终是指向不同内存位置处对象的引用(详见此处)。因此,在ArrayList中,实际对象从未存储在连续的位置上。实际对象的引用存储在连续的位置上。

另一方面,对于数组,它取决于数组是原始类型还是对象类型。对于原始类型,实际值以连续的位置存储,但对于对象,分配与ArrayList类似。Java ArrayList支持许多其他操作,如indexOf()、remove()等,而这些函数不受数组支持。

我们已经实现并看到了它们之间的差异,从输出中可知。现在,让我们通过以下表格形式绘制确定性的差异来结束文章:

基础 数组 ArrayList
维数 可以是单维或多维的 只能是单维的
遍历元素 使用for和for each一般用于数组迭代。 这里使用iterator来遍历ArrayList。
长度 length关键字可以给出数组的总大小。 size()方法用于计算ArrayList的大小。
大小 它是静态的,长度固定 它是动态的,大小可以在需要时增加或减小。
速度 它更快,因为它是固定大小的。 它相对较慢,因为它是动态的。
原始数据类型存储 原始数据类型可以直接存储,而不像对象那样添加。 原始数据类型不能直接添加,需要通过自动装箱和拆箱等帮助间接添加。
泛型 不能在此添加,因此不安全 可以在此添加,从而使ArrayList类型安全。
添加元素 赋值操作符仅起到作用。 这里使用了一种特殊的方法,称为add()方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程