【问题标题】:Error java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long错误 java.lang.ClassCastException:java.lang.Integer 无法转换为 java.lang.Long
【发布时间】:2018-04-14 13:38:20
【问题描述】:

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

我无法纠正错误是什么?

行内:“Long 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);
            }
        }
    }

线程“main”java.lang.ClassCastException 中的异常:java.lang.Integer 无法转换为 java.lang.Long

【问题讨论】:

  • 是否要移除优先级队列的顶部,然后将(移除的)顶部存储到变量pw1 中?请说清楚你想要什么。
  • 是的,我想删除优先队列的顶部,然后存储它。

标签: java casting priority-queue


【解决方案1】:

map 的声明值是raw type PriorityQueue(而不是参数化类型 PriorityQueue&lt;Long&gt;)。通过改变给它一个类型

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

到:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2020-07-22
    • 1970-01-01
    • 2019-11-29
    • 2020-01-19
    • 2015-12-23
    相关资源
    最近更新 更多