0

我有一堆声明为二维数组的变量:

int[][] array1 = {{}};
int[][] array2 = {{}};
etc..

我目前正在使用一种方法来调用另一种方法,其中一个变量作为带有开关的参数:

public void invokeMethod(){
switch(variableNumber){
    case 1: method(piece1);
    break;
    case 2: method(piece2);
    break;
    etc..
  }
}

这感觉像是处理这个问题的一种非常愚蠢的方式,有没有更聪明的解决方案?也许将变量存储在数组中?如果我面对数千个二维数组,我想做的是用不同数据类型的变量的值调用该方法,如下所示:

String arrayToBeInvokedWith = "array1";

method(arrayToBeInvokedWith){
}

(是的,我知道这太简单了,但你可以从中得到想法)

有没有类似的解决方案?非常感谢任何反馈。

编辑:所有数组都具有相同的大小。

4

2 回答 2

0

而不是声明一堆单独的数组......

编写一个封装二维数组实例的类。

如果随后使用类型为特殊数组类的泛型集合,则可以将数组的所有实例放入单个集合中。

然后,当您需要对数组进行操作时,您只需遍历集合即可。

或者,如果有一个与每个二维数组对象相关联的特定标识很重要,则将标识关联为 HashMap 中对象的键。然后当您需要对任何一个数组进行操作时,您可以使用它的键从映射中检索它。

代替

public void invokeMethod(){
    switch(variableNumber){
        case 1: method(piece1);
            break;
        case 2: method(piece2);
            break;
        :
        :
    }
}

你可以简单地使用类似的东西

public <T extends MyArrayClass> void invokeMethod(String arrKey, HashMap<String,T>
        arrays) {
    T my2dArray = arrays.get(arrKey);
    method(my2dArray);
    :
    :
}

当遇到像您这样的问题时,解决方案通常是创建一种表示数据抽象的新类型。

于 2013-11-08T23:22:34.850 回答
0

你真的需要使用数组吗?您可以使用 HashMap 来存储引用一个数组的键。要获取一个数组,您只需传递数组的键并获取它。

HashMap<String, int[]> hashMap = new HashMap<String, int[]>();

int array1[] = {1, 2};
int array2[] = {2, 3};
int array3[] = {3, 4};

hashMap.put("array1", array1);
hashMap.put("array2", array2);
hashMap.put("array3", array3);

int arrayWanted[] = hashMap.get("array2");
于 2013-11-08T23:29:47.643 回答