错误java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long

时间:2018-04-14 13:38:21

标签: java casting priority-queue

我收到给定代码的以下错误。

我无法纠正错误是什么?

在行中:"长pw1 = pq1.remove();"

    int n = in.ni();
    long a[] = in.gla(n);
    PriorityQueue<Long> pq = new PriorityQueue<>();
    Map<Long, PriorityQueue> map = new HashMap<>();
    Set<Long> s = new HashSet<>();
    for (int i = 0; i < n; i++) {
        if (s.contains(a[i])) {
            map.get(a[i]).add(i);
        } else {
            pq.add(a[i]);
            s.add(a[i]);
            map.put(a[i], new PriorityQueue<>());
            map.get(a[i]).add(i);
        }
    }
    while(!pq.isEmpty()){
        System.out.println(pq.remove());
    }
    while(!pq.isEmpty()){
        long p = pq.remove();
        System.out.println(p);
        PriorityQueue<Long> pq1 = map.get(p);
        while(pq1.size()>1){
            Long pw1 = pq1.remove();
            Long pw = pq1.remove();
            System.out.println(pw);
            if(s.contains(2*p)){
                map.get(2*p).add(1);
            }
            else{
                s.add(2*p);
                pq.add(2*p);
                map.put(p*2, new PriorityQueue<Long>());
                map.get(2*p).add(1);
            }
        }
    }
  

线程中的异常&#34; main&#34; java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long

1 个答案:

答案 0 :(得分:0)

map值的去除是raw type PriorityQueue(而不是参数化类型 PriorityQueue<Long>)。通过更改

给它一个类型
Map<Long, PriorityQueue> map = new HashMap<>();

为:

Map<Long, PriorityQueue<Long>> map = new HashMap<>();