在java中动态初始化数组名称?

时间:2013-02-23 11:56:11

标签: java linked-list biginteger

我想初始化很多数组。数组的名称遵循像array12,array13,array14,...... array19,array22,array23 ........... array99这样的序列。 实际上我有一个包含一些整数的数组1,一个包含一些整数的数组2,我将两者中的公共整数转换为array12。(类似于array2,3,4..9) 什么是最好的方法。 链表,映射,矢量? 请记住,我的程序经常使用子集(例如array12)。

我认为最好的方法是存储在数组中,因为我不必一直浏览链接列表(或任何其他方式)。 但我不能写

    public int array12=new int[10];
    public int array13=new int[10];

在代码中间,当我的i(某个整数)= 1且j = 2时,我想访问array12。 那我怎么办呢?..

我实际上是想解决这个问题。question page 请给我与我提出的问题相关的答案,而不是fb问题的答案。 我想自己做。

3 个答案:

答案 0 :(得分:2)

您需要进入更高维度的数组 - 具体而言,您似乎正在寻找3D数组。设计中的两个整数(即1中的2array12)应该是3D数组的前两个索引。

int[][][] array = new int[10][][];
for (int i = 0; i != 10 ; i++) {
    array[i] = new int[10][];
    for (int j = 0 ; j != 10 ; j++) {
        array[i][j] = new int[10];
    }
}

现在访问设计array34[i]的内容看起来像array[3][4][i]

答案 1 :(得分:0)

您需要使用地图 - 您不能(轻松)动态命名:

public final Map<Stiring, Integer[]> myMap = new HashMap<>(){
  {
    put("array1", new Integer[10]);
    put("array2", new Integer[10]);
    put("array3", new Integer[10]);
    ...more arrays
  }
};

您可以使用带有实例初始化技巧的匿名类将这些数组放入地图中,如上所述。

然后,您可以使用Map.get

引用数组
final Integer[] myArray = myMap.get("array1");

修改

根据@ twain249的评论,您可以使用循环填充地图:

public final Map<Stiring, Integer[]> myMap = new HashMap<>(){
  {
    for(int i=0;i<someNumber;++i) {
      for(int j=0;j<someOtherNumber;++j) {
        put("array" + i + "" + j, new Integer[10]);
      }
    }
  }
};

答案 2 :(得分:0)

这是不可能的。我的方法是创建和ArrayList以及你想要动态创建的每个数组,只需添加到ArrayList中的正确位置。

以下是代码示例:

ArrayList<int[]> listOfArrays = new ArrayList<int[]>(); // Creates a list of arrays.

int[] someArrayFromListOfArrays = listOfArrays.get(index); // Gets an array from arraylist

listOfArrays.add(new int[]); // Adds a new array to the collection

listOfArrays.add(index, new int[]); // This will insert an array into a specified location in the list

这应该符合您的需求。

以下是ArrayList的规范。

希望有所帮助