Skip to content

Conversation

@stillwearit
Copy link

No description provided.

@stillwearit stillwearit changed the title lesson14 task1 lesson14 task2 Mar 13, 2025
@stillwearit stillwearit changed the title lesson14 task2 lesson14 task1 Mar 13, 2025
@stillwearit stillwearit requested a review from KFalcon2022 March 19, 2025 08:27
System.out.println(newList);
newList.reverse();
System.out.println(newList);
newList.removeEvenHashCodes();
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот тут есть нюанс. Коллекция - это коллекция. Ей в пень не вперся функционал удаления элементов с четным хешкодом. Значит, если это все же нужно, стоит сделать это отдельно

На самом деле тут и моя вина есть - не стоило давать такую задачку до знакомства с итератором. Без него или же метода получения следующего элемента, красиво это не сделаешь. Но на будущее стоит отложить: у каждого класса должна быть своя зона ответственности, накручивать дополнительную функциональность ради сиюминутной потребности - плохая затея

@@ -0,0 +1,7 @@
package com.walking.lesson39_queue1.task1.exception;

public class ListIsEmptyException extends RuntimeException {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EmptyListException звучит более органично. Правда, не уверен, что это должно быть исключением - пустой и пустой, чего ругаться?)

return size == 0;
}

public boolean find(Object o) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это скорее contains(). Семантика find() обычно подразумевает возвращение найденного элемента. Именно здесь это постольку-поскольку актуально, но даже в таком кастрированном виде может быть, что equals() определен не по всем полям и на вход поступает лишь частично инициированный объект. Тогда зона применения метода будет лежать в получении объекта коллекции, в надежде найти значения второстепенных атрибутов. Надеюсь, не слишком сложно описал


public Object pop() {
Object del = list.getTailValue();
list.remove(del);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а что, если элементы дублируются?) получается, сразу все дубликаты удалишь:)

Невелика проблема в рамках этой задачи, но для общего решения явный недочет


public void remove(Object o) {
if (isEmpty()) {
throw new ListIsEmptyException("Список пуст.");
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вообще - довольно показательная ошибка с избыточными исключениями. Если я удаляю несуществующий элемент из непустой коллекции - это не ошибка. Но если коллекция пуста - сюрприз. Это вводит неочевидное и двойственное поведение. Если когда-то придется реализовывать свои структуры данных - такого стоит избегать, потому что это буквально лишает АПИ прозрачности для пользователя


Node<E> current = tail;
while (current.prev != null) {
if (current.prev.value.equals(el)) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

выглядит, будто current.prev просится в переменную для части использований

return false;
}

public int findAll(E el) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

опять же, неожиданное поведение для find*-метода

this.next = next;
}
}
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

хорошая реализация. Ошибки, унаследованные от однонаправленного списка, дублировать не стал

import java.util.LinkedList;

public class TaskService {
private final Deque<Task> tasks;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выглядит, будто здесь можно было и Queue использовать как интерфейс

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants