2013-07-11 22 views
1

我想要运行一个非常简单的程序,并且我被困在声明嵌套列表和地图的基础上。如何在Java中正确嵌套多个ArrayLists/Maps?

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

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

因此,举例来说,我需要多项式的ArrayList,说的第一个是简单的:

多项式1:2倍^ 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>> 

那么,如何然后我去这样做还是我只是去这一切错误的方式?

+0

您正在寻找'名单>'? – NINCOMPOOP

+0

更多相似ArrayList >> 原来的ArrayList不需要键/值 – leigero

+0

然后就像'ArrayList >>' ,Map有一个键值对。 – NINCOMPOOP

回答

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<>(); 
+0

是的,谢谢你,我刚刚意识到这一点。我从来没有完全确定这意味着什么,但是现在我开始变得更有意义了,因为我自己已经遇到了这个问题。 – leigero

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中使用。

+0

我也试过,但它给出了错误: 无法实例化类型Map > – leigero

+0

已编辑,也许分离的地图将工作。 –