如何在Java中正确嵌套多个ArrayLists / Maps?

时间:2013-07-11 06:02:54

标签: java map arraylist nested

我正在尝试运行一个非常简单的程序,而且我仍然坚持声明嵌套列表和地图的基础知识。

我正在开发一个项目,要求我将多项式存储到ArrayList中。 每个多项式都被命名,所以我想要一个键/值映射来将多项式的名称(1,2,3等)作为键,将实际的多项式作为值。

现在实际多项式也需要键值,因为该程序的性质要求指数与系数相关联。

所以例如我需要一个多项式的ArrayList,比如说第一个是简单的:

多项式1:2x ^ 3

数组列表包含整个事物作为地图,并且地图包含键:多项式1和值:是一个Map ...其中2和3是键/值。

我的代码如下,但我不是100%关于如何格式化这种嵌套逻辑。

public static void main(String[] args) throws IOException{
        ArrayList<Map> polynomialArray = new ArrayList<Map>();
        Map<String, Map<Integer, Integer>> polynomialIndex = new Map<String, Map<Integer, Integer>>();
        String filename = "polynomials.txt";
        Scanner file = new Scanner(new File(filename));

        for(int i = 0; file.hasNextLine(); i++){
            //this will eventually scan polynomials out of a file and do stuff

        }

编辑: 更新了地图中的键/值,仍有问题。

上面的代码给出了以下错误:

Cannot instantiate the type Map<String,Map<Integer,Integer>>

那么我该如何做到这一点,或者我只是以错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:2)

您无法实例化new Map<String, Map<Integer, Integer>>(),因为java.util.Map接口(它没有构造函数)。您需要使用类似java.util.HashMap的具体类型:

Map<String, Map<Integer, Integer>> polynomialIndex = new HashMap<String, Map<Integer, Integer>>();

此外,如果您使用的是Java 7或更高版本,则可以使用generic type inference来保存一些输入内容:

Map<String, Map<Integer, Integer>> polynomialIndex = new HashMap<>();

答案 1 :(得分:1)

这是不正确的:

Map<String, Map<Integer>> polynomialIndex = new Map<String, Map<Integer>>();

地图需要有两个参数,而嵌套地图Map<Integer>只有一个。我想你正在寻找类似的东西:

Map<String, Map<Integer, Integer>> polynomialIndex = new Map<String, Map<Integer, Integer>>();

或者最好分开进行。

Map<String, Map> polynomialIndex = new Map<String, Map>();
Map<Integer, Integer> polynomialNumbers = new Map<Integer, Integer>();

有了这个,您可以将数字放在polynomailNumbers Map中,然后在polynomialIndex中使用它。