如何在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.
请帮我解决这个问题
答案 0 :(得分: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()
,然后您无需按键获取值答案 1 :(得分: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();
}
}
但以及 Jon 指出,更好地拥有自己的实现/封装而非使用Object
答案 2 :(得分: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++;
}