我有一个对象列表:
static List table_rows = new ArrayList();
我想填充TreeMaps,它包含一个String和一个Integer数组对象:
for (int i = 0; i < observation_files.length; i++) {
TreeMap<String, Integer[]> tm = new TreeMap<String, Integer[]>();
Integer[] cells = new Integer[observation_files.length];
for (int x = 0; x < cells.length; x++) {
cells[x] = 0;
}
tm.put("model" + i, cells);
table_rows.add(tm);
}
现在我想像这样访问int数组:
table_rows.get(0).get("model1")[0] = 2;
但是eclipse并没有让我这样做并且给了我这个错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The method get(String) is undefined for the type Object
Syntax error on token ".", Identifier expected after this token
at HmmPipeline.main(HmmPipeline.java:102)
代码提示或完成使我没有任何工作,我做错了什么?
答案 0 :(得分:1)
原始ArrayList.get()
返回类型Object
。如果您希望它返回TreeMap<String, Integer[]>
,则应将列表声明为:
static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();
如果使用像Eclipse这样的IDE,最好设置代码编译选项,以便在使用原始(非参数化)类型时显示警告。虽然它应该已经将您的代码标记为无效。
顺便说一句,你要做的不是存储基本上是二维方阵的非常有效的方法。
答案 1 :(得分:1)
您需要将table_rows.get(0)
投射到(TreeMap<String, Integer[]>)
或在table_rows
声明中定义:
static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();
答案 2 :(得分:1)
尝试
static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();
或者,您需要演员如下:
((TreeMap<String, Integer[]>)table_rows.get(0)).get("model1")[0] = 2;
另外,根据您感兴趣的功能,您可以使用以下某种界面类型的引用来引用您的TreeMap
-
Map<K,V>
NavigableMap<K,V>
SortedMap<K,V>
答案 3 :(得分:0)
1。您需要声明要使用的ArrayList的类型。
static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();
2。迭代这样的地图..
for (Map.EntrySet(String, Integer) temp : tm.entrySet()){
// use getKey(), getValue() and do whatever u want.
}