我无法在TreeMap中访问int []

时间:2012-07-22 15:01:12

标签: java arrays list

我有一个对象列表:

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)

代码提示或完成使我没有任何工作,我做错了什么?

4 个答案:

答案 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.

       }