【问题标题】:How can I make an array of my arrays in Java? (WITHOUT ArrayLists)如何在 Java 中制作我的数组数组? (没有 ArrayLists)
【发布时间】:2018-11-05 10:27:30
【问题描述】:

我有几个 char[][] 类型的多维数组。 比如..

char[][] ARRAY_1 = {
    {'.','#'},
    {'$','@'}
}
char[][] ARRAY_2 = {
    {'.','#'},
    {'$','@'}
}

我想创建一个数组或某种列表,例如

ARRAY = {ARRAY_1,ARRAY_2,...}

所以我可以放入 ARRAY[1](或类似的东西)并让它返回整个 char[][] ARRAY_1

我对 Java 编程非常陌生,所以我不确定最好的方法是什么。

编辑:我刚刚发现我不允许使用 ArrayLists。

【问题讨论】:

  • “我想创建一个数组或某种列表......” - 请清楚你想要什么。数组和列表是不同的,有很多方法可以创建它们,所以答案取决于你想要什么。
  • mm 如果你在 java 9 List.of(ARRAY_1,ARRAY_2);
  • @soorapadman 9 或 10,哈哈!

标签: java arrays arraylist multidimensional-array


【解决方案1】:

直接回答:使用ArrayList<char[][]>char[][][]

基本上,您创建一个 ArrayList 来保存您的 2 维数组或 3 维字符数组。

List<char[][]> array = new ArrayList<>();

char[][][] array = char[length][][];

要添加数组,只需使用以下代码:

array.add(arrayOne); //for an ArrayList
array.add(arrayTwo);

array[0] = arrayOne; //for an array
array[1] = arrayTwo;

要获取数组,只需使用以下内容(其中数字是索引):

array.get(0); //for an ArrayList
array.get(1);

array[0]; //for an array
array[1];

查看ArrayList javadoc 了解更多信息。

(编辑:变量已更改以匹配命名约定)

【讨论】:

  • 我以为你不能在 java 泛型中使用原始类型?不应该是 Character[][] 而不是 char[][],还是我遗漏了什么?
  • 你能解释一下char[][][]方法吗?我尝试过使用它,但稍后调用数组时遇到问题。
  • @MarDev 在 Java 中,数组被视为对象,因此不需要包装类。
  • @MarDev char[][] 实际上是一个包含chars 序列的对象(或者在这种情况下是chars 序列的序列,但你明白了)跨度>
【解决方案2】:

所以...如果您不允许使用列表...这是创建现有数组数组的一种方法。

 char[][][] ARRAY = new char[][][]{ARRAY_1, ARRAY_2};

见解 #1:Java 中的 N 维数组是 N-1 维数组的数组(假设 N > 1)。

见解#2:数组从零开始索引。


我以后如何单独调用这些数组?

  1. 在您的示例中,您仍然拥有原始数组的名称。

  2. 基于洞察 #1":

    char[][] ARRAY_1_AGAIN = ARRAYS[0];
    System.out.println(ARRAY_1 == ARRAY_1_AGAIN);  // prints true
    

    由于ARRAY_1ARRAY 的第一个子数组(根据前面的示例),我们需要使用ARRAYS[0](而不是ARRAYS[0])来访问它。

【讨论】:

  • 以后如何单独调用数组?
【解决方案3】:

试试这个:

List<char[][]> list = new ArrayList<>();
list.add(ARRAY_1);
list.add(ARRAY_2);

或者

char[][][] ARRAY = new char[length][][];
ARRAY[0] = ARRAY_1;
ARRAY[1] = ARRAY_2;

或者

char[][][] ARRAY = new char[][][]{ARRAY_1, ARRAY_2};

延伸阅读:

【讨论】:

    【解决方案4】:

    您正在使用锯齿状阵列...

    也试试这个

    char[][] array = new char[5][];
    
    array[0] = array1;
    array[1] = array2;
    

    问候

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2016-02-16
      相关资源
      最近更新 更多