【问题标题】:Java, Access a Deque stored in a listJava,访问存储在列表中的双端队列
【发布时间】:2020-07-12 10:51:17
【问题描述】:

所以我有这个列表 l1 的 Deques,存储在 ListArray 中, 字符串存储在双端队列中。

  1. 当我尝试从一个 Deque 轮询字符串时,我收到了以下错误: 错误:不兼容的类型:对象无法转换为字符串 temp = l1.get(b).pollFirst();

但是l1.get(b).pollFirst().getClass().getName() 返回 java.lang.String

我通过将行更改为temp = (String)l1.get(b).pollFirst(); 解决了这个问题,但不知道为什么以及是否正确。

  1. 当我尝试使用l1.get(a).offerLast(temp); 将此字符串temp 加入到列表中的另一个双端队列时,我得到uses unchecked or unsafe operations.

我应该如何解决这个问题??

代码片段如下:

while (!l1.get(b).isEmpty()){
    temp = l1.get(b).pollFirst();
    l1.get(a).offerLast(temp);
} 

【问题讨论】:

  • 您能否编辑问题并显示列表和双端队列是如何声明的?
  • (总是使用人类可读的变量名...。使用这种通用缩写很难阅读)
  • 在我看来你没有在声明期间为 Deque 指定类型参数
  • @Liquidpie 谢谢!这正是问题所在!谢谢你的帮助!

标签: java deque unsafe unchecked


【解决方案1】:

您尚未为列表中存储的Deque 指定所需的类型参数。正确的声明如下所示:

List<Deque<String>> l1 = new ArrayList<>();

此外,如 cmets 中所述,请多考虑变量名称,“l1”让读者不知道此列表的用途。

【讨论】:

  • 当你发现一个有用的答案@Vera,你可以投票,并将其标记为“接受的”答案
【解决方案2】:

正如其他人所提到的,问题是参数化类型没有指定类型参数。一旦指定相同,您就不必为temp 进行类型转换。以下示例代码可帮助您理解这一点。

import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;

public class DequeExample {
    public static void main(String[] args) {
        DequeExample dequeExample = new DequeExample();
        dequeExample.testDeque();
    }

    public void testDeque() {
        List<Deque<String>> deques = prepareDeques();
        int indexOfDequeA = 0;
        int indexOfDequeB = 1;
        while (!deques.get(indexOfDequeB).isEmpty()){
            String temp = deques.get(indexOfDequeB).pollFirst();
            deques.get(indexOfDequeA).offerLast(temp);
        }
        System.out.println("Modified Deque A = " + deques.get(indexOfDequeA));
        System.out.println("Modified Deque B = " + deques.get(indexOfDequeB));
    }

    private List<Deque<String>> prepareDeques() {
        List<Deque<String>> deques = new ArrayList<>();
        Deque<String> dequeB = new LinkedList<>();
        deques.add(dequeB);
        Deque<String> dequeA = new LinkedList<>();
        deques.add(dequeA);
        dequeB.addLast("Element1");
        dequeB.addLast("Element2");
        dequeB.addLast("Element3");
        System.out.println("Initial Deque A = " + dequeA);
        System.out.println("Initial Deque B = " + dequeB);
        return deques;
    }
}

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2010-12-28
    • 2016-08-18
    • 2018-07-02
    • 2018-12-25
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多