1

如何在java中设置二维对象数组的值。

以下是我的 for 循环:

Object[][] hexgenSecurityInferenceData = null;
for (String methodName: knowGoodMap.keySet()) {
    hexgenSecurityInferenceData = new Object[][] {
        {
            (KnownGoodInfoRO) knowGoodMap.get(methodName), new Object[] {
                (MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)
            }
        },
    };
}

这仅打印一行数据。我确定我犯了错误adding values to Array of Object but really don't know how to fix.

请帮我解决这个问题

4

3 回答 3

4

您不能元素添加到数组中 - 您只能在数组中设置元素。

我建议你List<Object[]>改用:

List<Object[]> hexgenSecurityInferenceData = new ArrayList<Object[]>();
for (String methodName:knowGoodMap.keySet()) {
    hexgenSecurityInferenceData.add(new Object[] {
        knowGoodMap.get(methodName),
        new Object[] {
            methodPropertiesMap.get(methodName),
            methodParametersMap.get(methodName)
        }
     });
 }

(我已经删除了强制转换,因为它们毫无意义......无论如何你都在存储值Object[]。强制转换的唯一好处是如果对象是意外类型时会导致异常。)

如果您真的需要,您仍然可以使用数组,但您需要以正确的大小开始创建它,然后保留“当前索引”。无论如何,使用数组通常比使用列表更难。

如果你真的需要一个数组,你可以从列表中创建一个:

Object[][] array = hexgenSecurityInferenceData.toArray(new Object[0][]);

以这种方式分两个阶段执行此操作将比直接预先填充数组更简单。

我实际上建议进行两个进一步的更改:

  • 不要只Object[]用于这个......创建一个类型来封装这些数据。使用您当前的方法,您甚至可以嵌套Object[]在...读取Object[]此数据的任何代码都将是可怕的。
  • 使用entrySet()而不是keySet(),那么你就不需要通过键来获取值
于 2013-05-15T05:53:37.003 回答
1

你有一个对象矩阵,Object[][]所以如果你想填充这个二维数组,你必须执行以下操作:

Object[][] hexgenSecurityInferenceData=new Object[10][10];
for(int i=0; i<10;i++){
   for(int j=0; j<10;j++){
        hexgenSecurityInferenceData[i][j] = new Object();
   }
}

但是乔恩也指出,最好有自己的实现/封装而不是使用Object

于 2013-05-15T05:54:29.477 回答
1

使用List是解决此问题的最佳方法。但是,您仍然可以object[]通过初始化数组来使用。

Object[][] hexgenSecurityInferenceData = new Object[knowGoodMap.keySet().size()][];
int i = 0;
for (String methodName : knowGoodMap.keySet()) 
{
  hexgenSecurityInferenceData[i][0] = new Object[][]
  {
     {(KnownGoodInfoRO) knowGoodMap.get(methodName), 
         new Object[]{(MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)}
     }
  };
   i++;
 }
于 2013-05-15T06:07:41.670 回答