Java-类型不匹配(但是两者都来自同一类型?!):无法从HashMap <Integer,ArrayList <Integer >>转换为HashMap <Integer,ArrayList <Integer >>

时间:2019-12-24 23:29:32

标签: java arraylist collections maps


编辑:问题已解决:请参阅Karim SNOUSSI的回答及其下方的评论。


这是我在堆栈溢出时遇到的第一个问题,因此我可能不会一开始就做好一切。抱歉另外,我是Java和一般编程的新手。

我遇到了一个奇怪的错误,无法真正理解该解决方案。

IDE eclipse尝试将hashMap从一个类传递到另一个类时说: 类型不匹配:无法从HashMap>转换为HashMap>

但是如果我做对的话,两者的类型相同,所以不知道出了什么问题。

这是我的代码:我只发布其中的一部分,以免混乱不堪

我的类中有一个名为graph.class的HashMap, 在public HashMap> getAllShortestPaths()方法中使用它 计算图中每个节点到其他任何节点的所有最短路径 并存储到hashMap中以进行进一步处理。 如果我想通过其中的方法将其打印到屏幕上,则可以正常显示所有信息。

但是我的目的是将此hashMap传递给另一个类,在该类中我将收集对图形的整个分析并将其保存到新文件中。

public class Graph {
.
.
    private HashMap<Integer, ArrayList<Integer>> shortestPathsMap = new HashMap<Integer, ArrayList<Integer>>();

。 。

public HashMap<Integer, ArrayList<Integer>> getShortestPathsMap() { return shortestPathsMap; }
.
.
.
    public void getAllShortestPaths() {
        for(int i = 0; i < getNodeCount(); i++) {
            ArrayList<Integer> shortestPathMapValues = new ArrayList<>();   // saves ... 

            for(int n = i; n < getNodeCount(); n++) {
                shortestPathMapValues.add(n);                               // the corresponding node id's and ..
                shortestPathMapValues.add((int) shortestPath(i,n));         // the outcome of shortestPath() calculation
            }

            shortestPathsMap.put(i, shortestPathMapValues);                 // saves the first node id and the corresponding values
        }
    }
.
. 

因此,为了进行测试,我将其传递给Main.class并确实希望将其打印到屏幕上:

public HashMap<Integer, ArrayList<Integer>> getShortestPathsMap() { 
        return shortestPathsMap; 
}

public class Main {

    public static void main(String[] args) {
.
.
.
G.getAllShortestPaths();

                    HashMap<Integer, ArrayList<Integer>> spMap = new HashMap<Integer, ArrayList<Integer>>();
                    spMap = G.getShortestPathsMap();

                    // iterate and display values
                    for(Entry<Integer, ArrayList<Integer>> entry : spMap.entrySet()) {
                        int key = entry.getKey();
                        ArrayList<Integer> values = entry.getValue();

                        System.out.println("Key = " + key);
                        System.out.println("Values = " + values);
                    }
.
.
. 

在Main.class中的以下位置: spMap = G.getShortestPathsMap(); IDE显示

  

类型不匹配:无法从HashMap转换>   到HashMap>

但是:

HashMap<Integer, ArrayList<Integer>> spMap = new HashMap<Integer,Integer, ArrayList<Integer>>();

HashMap<Integer, ArrayList<Integer>> shortestPathsMap = new HashMap<Integer, ArrayList<Integer>>();

spMap和shortestPathsMap具有相同的类型,不是吗?

我很高兴收到任何有帮助的答复,并在此先感谢您。

1 个答案:

答案 0 :(得分:0)

尝试用您的主要方法替换它

HashMap<Integer, ArrayList<Integer>> spMap = new HashMap<Integer, ArrayList<Integer>>();
spMap = G.getShortestPathsMap();

与此

Map<Integer, ArrayList<Integer>> spMap = G.getShortestPathsMap();