Переопределение методов add листа

78
23 ноября 2020, 23:40

Не могу переопределить методы add. Вернее могу, но они не работают так, как нужно. Суть задачи: У на есть фигуры (типа Figure) и коробка (ArrayList<>()). Фигуры мы добавляем в коробку. Нельзя добавить одну и ту же фигуру в коробку. Пытаюсь переопределить это в классе с моей коробкой - не получается.

Класс коробка:

import java.util.ArrayList;
import java.util.List;
public class Box extends ArrayList {
    private List<Figure> box;
    public Box() {
        box = new ArrayList<>();
    }
    @Override
    public boolean add(Object o) {
        if (box.contains(o)){
            return false;
        }
        return super.add(o);
    }
    @Override
    public void add(int index, Object element) {
        if (box.contains(element)){
            return;
        }
        super.add(index, element);
    }
}

В итоге из класса Main всё равно можно спокойно добавить 2 одинаковые фигуры в коробку. Что не так с моей коробкой?)

Вот класс Main:

public class Main {
    public static void main(String[] args) {
        Box box = new Box();
        PaperCircle paperCircle = new PaperCircle(5);
        System.out.println(box.add(paperCircle));
        System.out.println(box.add(paperCircle));
        System.out.println(box.size());
    }
}

При выполнении видим: true true 2

А должно быть: true false 1

Answer 1

Во-первых

public class Box extends ArrayList<Figure> {
    @Override
    public boolean add(Figure figure) {
        if (this.contains(figure)){
            return false;
        }
        return super.add(figure);
    }
}

Во-вторых, лучше подойдёт не ArrayList, а HashSet.

Во-третьих, стоит реализовать в классе Figure методы hash и equals.

READ ALSO
Redirect с сохранением header

Redirect с сохранением header

Проблема в том, что я получаю 500 ошибкуА если я делаю тоже самое, но id передаю через куки, то всё нормально

100
Java Где хранится volatile переменная

Java Где хранится volatile переменная

Всегда думал что volatile переменные в Java хранятся в MetaSpace, недавно на собеседовании мне сказали что это неверноТак вот вопрос: где они хранятся?

105
String замена символа. Java

String замена символа. Java

Добрый день как можно заменить символ в String пробовал так:

91
Количество установок в AlarmManager

Количество установок в AlarmManager

Добрый день интересует такой вопрос, как сделать несколько установок по времени с помощью AlarmManagerДопустим мне нужно 2 сигнала в 11 и 12 часов

83