📜  Java中的Array vs ArrayList

📅  最后修改于: 2020-03-28 11:14:25             🧑  作者: Mango

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

  1. Array数组:我们用Java创建的固定大小的简单数组,如下所示
    int arr[] = new int[10]
  2. ArrayList Java中实现列表接口的动态大小的数组。
          ArrayList arrL = new ArrayList();
          Type是ArrayList的元素类型

Array和ArrayList之间的区别

  • 数组Array是Java提供的基本功能。ArrayList是Java Collection框架的一部分。因此,数组成员使用[]进行访问,而ArrayList具有一组访问元素并对其进行修改的方法。
    // Java程序展示Array和ArrayList之间的区别
    
    import java.util.ArrayList;
    import java.util.Arrays;
    class Test
    {
        public static void main(String args[])
        {
            /* ........... 常规数组Array............. */
            int[] arr = new int[2];
            arr[0] = 1;
            arr[1] = 2;
            System.out.println(arr[0]);
            /*............ArrayList..............*/
            // 创建ArrayList,初始化容量=2
            ArrayList arrL = new ArrayList(2);
            // 给ArrayList增加元素
            arrL.add(1);
            arrL.add(2);
            // 访问ArrayList的元素
            System.out.println(arrL.get(0));
        }
    }

    输出:

    1
    1
  • Array是大小固定的数据结构,而ArrayList不是。创建对象时无需提及Arraylist的大小。即使我们指定了一些初始容量,也可以添加更多元素。
    // Java程序展示Array和ArrayList之间的区别
    
    import java.util.ArrayList;
    import java.util.Arrays;
    class Test
    {
        public static void main(String args[])
        {
            /* ........... 常规数组Array............. */
            // Need to specify the size for array
            int[] arr = new int[3];
            arr[0] = 1;
            arr[1] = 2;
            arr[2] = 3;
            // 数组array arr[]无法增加元素
            /*............ArrayList..............*/
            // 不需要表示大小
            ArrayList arrL = new ArrayList();
            arrL.add(1);
            arrL.add(2);
            arrL.add(3);
            arrL.add(4);
            // 还可以增加更多的元素到arrL
            System.out.println(arrL);
            System.out.println(Arrays.toString(arr));
        }
    }

    输出:

    [1、2、3、4]
    [1,2,3]
  • 数组可以包含原始数据类型,也可以包含类的对象,具体取决于数组的定义。但是,ArrayList仅支持对象条目,而不支持原始数据类型。
    注意:当我们执行arraylist.add(1);  ,此时Java将原始int数据类型转换为Integer对象。样例代码:
    import java.util.ArrayList;
    class Test
    {
        public static void main(String args[])
        {
           // 合法
            int[] array = new int[3];
            // 合法
            Test[] array1 = new Test[3];
            // 非法
            // 编译报错 
            // ArrayList arrL = new ArrayList();
            // 合法
            ArrayList arrL1 = new ArrayList<>();
            ArrayList arrL2 = new ArrayList<>();
            ArrayList arrL3 = new ArrayList<>();
        }
    }
    
    
    
    
  • 由于无法为原始数据类型创建ArrayList,因此ArrayList的成员始终是对位于不同内存位置的对象的引用。因此,在ArrayList中,实际对象永远不会存储在连续的位置。实际对象的引用存储在连续的位置。
    在数组Array中,它取决于数组是原始类型还是对象类型。在基本类型的情况下,实际值是连续的位置,但是在对象的情况下,内存分配类似于ArrayList。
  • 附带说明一下,Java中的ArrayList可以被视为类似于C++中的vector