Press "Enter" to skip to content

List < Integer >[] 是什么?

在写算法题的时候突然想到,在数组里可不可以存一个动态数组进去。试了试好像不行,在网上搜了一番,谷歌前几页都没有一个很好的答案。于是我就展开了一番研究,最后得出结果放在这里。

数组里不能直接套arraylist。首先,数组是一种固定长度的、线性的数据结构,它可以存储多个相同类型的元素。例如,你可以定义一个整数数组来存储多个整数,或者定义一个字符串数组来存储多个字符串。数组的长度在创建时就已经确定,无法改变。

而ArrayList是一种可变长度的、线性的数据结构,它可以存储多个相同类型的元素。与数组不同,ArrayList的长度是可以动态改变的,你可以使用add()方法向ArrayList中添加新的元素,也可以使用remove()方法从ArrayList中删除元素。

但是,我们可以在数组中存储List的引用,就像你可以在数组中存储任何其他对象的引用一样。例如:

import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer>[] arrayOfLists = new ArrayList[5];

  }
}

在这个例子中,我们声明了一个数组,数组中的每个元素都是一个ArrayList。我们可以使用下标访问数组中的每个元素,并对其进行操作。例如,我们可以使用add()方法向ArrayList中添加元素:

import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer>[] arrayOfLists = new ArrayList[5];

    for (int i = 0; i < arrayOfLists.length; i++) {
      arrayOfLists[i] = new ArrayList<>();
    }
    
    // Add elements to the lists in the array
    arr[0].add(1);
    arr[0].add(2);
    arr[1].add(3);
    arr[1].add(4);
    arr[2].add(5);
    arr[3].add(6);
    arr[4].add(7);
    arr[4].add(8);

     // Print the elements of the lists
    for (int i = 0; i < arr.length; i++) {
      System.out.println("Elements in list " + i + ": " + arr[i]);
    }
    
    // Get the second element of the first list
    int x = arr[0].get(1);
    System.out.println("Second element of first list: " + x);
  }
}

上面代码的输出为:

Elements in list 0: [1, 2]
Elements in list 1: [3, 4]
Elements in list 2: [5]
Elements in list 3: [6]
Elements in list 4: [7, 8]
Second element of first list: 2

这样就可以在数组中存储ArrayList了,但是要注意的是,需要适当地处理数组和ArrayList之间的类型转换,以确保类型安全。

类型安全,指的是在程序运行过程中不会发生类型转换错误的情况。例如,你声明了一个数组来存储ArrayList,如下所示:

List<String>[] arrayOfLists = new ArrayList[5];

在这个例子中,我们声明了一个数组,数组中的每个元素都是一个String ArrayList。但是,如果你试图向数组中添加一个其他类型的ArrayList,则会发生类型转换错误,例如:

arrayOfLists[0] = new ArrayList<Integer>();

这样就会抛出编译错误,因为我们声明的数组只能存储ArrayList<String>类型的元素,而你试图向数组中添加的是ArrayList<Integer>类型的元素。

为了避免这种情况,你需要适当地处理数组和ArrayList之间的类型转换,例如使用强制类型转换(但不推荐):

arrayOfLists[0] = (List<String>)new ArrayList<Integer>();

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注