0

我有一个对象列表:

static List table_rows = new ArrayList();

我想用 TreeMaps 填充它,它由一个字符串和一个整数数组对象组成:

    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

4 回答 4

1

原始ArrayList.get()返回类型Object。如果您希望它返回TreeMap<String, Integer[]>,您应该将您的列表声明为:

static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();

如果您使用 Eclipse 之类的 IDE,最好将代码编译选项设置为在使用原始(未参数化)类型时显示警告。尽管它应该已经将您的代码标记为无效。

顺便说一句,您尝试做的并不是存储基本上是二维方形数组的非常有效的方法。

于 2012-07-22T15:05:30.427 回答
1

您需要在声明中强制table_rows.get(0)转换(TreeMap<String, Integer[]>)或定义table_rows

static List<TreeMap<String, Integer[]>> table_rows = new ArrayList<TreeMap<String, Integer[]>>();
于 2012-07-22T15:05:40.190 回答
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>
于 2012-07-22T15:05:49.307 回答
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.

       }
于 2012-07-22T15:10:43.747 回答