У меня есть список пар, как я могу проверить, содержит ли список определенный элемент или нет. Функция list.contains всегда дает false - PullRequest
1 голос
/ 10 апреля 2019

Я создал пару классов и список объектов этого класса.Как я могу проверить, содержит ли список объект или нет

Я попробовал метод list.contains

//the pair class

public static  class pair
{
    int x,y;
    public pair(int x,int y)
    {
        this.x=x;
        this.y=y;
    }

    public int getY() {
        return y;
    }

    public int getX() {
        return x;
    }
}

//this line is always giving false as output

if (!l.contains(new pair(x-1,y)))
                count_1++;

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

По умолчанию объекты в Java равны, только если экземпляры одинаковы (когда вы говорите, new Pair() вы создаете новый экземпляр!).

Мы можем переопределить это поведение, переопределив equals() метод вашего Point класса.Вот так:

public class Point {
    private final x;
    private final y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    private static boolean isPoint(Object o) {
        return o != null && o instanceof Point;
    }

    private boolean coordsEqual(Point p) {
        return getX() == p.getX() && getY() == p.getY();
    }

    public boolean equals(Object o) {
        return isPoint(o) && coordsEqual((Point) o); //is o is a point? Does it have equal coords?
    }

Теперь Point.equals() вернет true, если наши координаты совпадают, а объект по умолчанию соответствует поведению.Поскольку Collection.contains() использует метод equals() для проверки на равенство, ваш код будет вести себя как положено.

1 голос
/ 11 апреля 2019

Вам нужно написать метод equals в вашем классе Pair, чтобы List мог определить, содержит ли он Pair, который вы ищете.List будет использовать ваш метод equals при поиске совпадений.

Самый простой способ написать ваш метод equals - это позволить вашей IDE сгенерировать его для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...