Ошибка связанного списка peek () не нуль и size () = 0

import java.util.LinkedList;

public LinkedList<String> mylinkedlist;

/*...*/

System.out.println("STRING: "+ mylinkedlist.peek() +" SIZE: "+ mylinkedlist.size());

выход

STRING: блаблабла РАЗМЕР: 0

это вопрос отладки: как peek() вернуть значение и размер списка равным 0?

Всего 3 ответа


Вы не можете просмотреть элемент в LinkedList И иметь его размер равным нулю. Подумайте о том, что вы говорите: «Как я могу посмотреть на это значение и у списка нет значений?». Причина этого в том, что peek() получает первый элемент в списке, но НЕ удаляет его. Тем не менее , вы можете искать pop() вместо этого. Используя pop() вы можете получить и удалить первый элемент одновременно. Согласно документации здесь "Извлекает элемент из стека, представленного этим списком. Другими словами, удаляет и возвращает первый элемент этого списка".

LinkedList<String> myList = new LinkedList<>();
myList.add("blablabla");
System.out.println("String: " + myList.pop() + ", Size: " + myList.size());

Это распечатывает:

String: blablabla, Size: 0

Если вам абсолютно необходимо вернуть значение, когда размер равен 0, у вас есть несколько вариантов.

  1. Создайте свою собственную реализацию LinkedList
  2. Перехватите исключение, которое будет выдано в данный момент, а затем верните значение, которое вы считаете подходящим для этого сценария.
  3. Проверьте размер связанного списка перед вызовом .peek() и верните соответствующее значение вместо вызова .peek() если размер равен 0. Если это не 0, продолжайте и сделайте вызов.

Реализация метода peak () для java.util.LinkedList говорит, что «извлекает, но не удаляет, заголовок (первый элемент) этого списка».

Так что с java.util.LinkedList это невозможно.

Возможно, вы импортировали LinkedList из какой-то другой библиотеки, кроме "java.util.LinkedList"


Есть идеи?

10000