Java, доступ к дека, хранящейся в списке - PullRequest
1 голос
/ 12 июля 2020

Итак, у меня есть этот список l1 Deques, хранящийся в ListArray, строки хранятся в Deques.

  1. Когда я пытаюсь опросить String из одного из Deque, я получил это ошибка: ошибка: несовместимые типы: объект не может быть преобразован в String temp = l1.get(b).pollFirst();

Но l1.get(b).pollFirst().getClass().getName() возвращает java .lang.String

Я решил это, изменив строку в temp = (String)l1.get(b).pollFirst(); Но не знаю, почему и правильно ли.

Когда я пытаюсь получить доступ к этой строке temp в очереди в другой Deque в списке, с l1.get(a).offerLast(temp);, я получил uses unchecked or unsafe operations.

Как мне исправить эту проблему ??

Часть кода выглядит следующим образом:

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

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Как упоминалось другими, проблема в том, что параметризованные типы не имеют указанного параметра типа. После того, как вы укажете то же самое, вам не нужно выполнять приведение типов для 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;
    }
}
0 голосов
/ 12 июля 2020

Вы не указали обязательный параметр типа для Deque, хранящегося в вашем списке. Правильное объявление будет выглядеть так:

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

Кроме того, как упоминалось в комментариях, подумайте больше об именах переменных, «l1» не дает читателю понять, для чего этот список.

...