Как сделать набор массивов в Java? - PullRequest
0 голосов
/ 23 марта 2012

Поскольку функция equals в массиве проверяет только экземпляр, она не работает с Set.Следовательно, мне интересно, как создать набор массивов в java?

Один из возможных способов - поместить каждый массив в объект и реализовать функцию equals для этого класса, но не слишком ли это снизит производительность?

Ответы [ 5 ]

3 голосов
/ 23 марта 2012

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

Всегда старайтесь использовать вместо него безопасный тип ArrayList<T>, и у вас не будет такого родавопросы.

1 голос
/ 23 марта 2012

Если вы сделаете ваш Set экземпляром TreeSet, вы можете указать собственный компаратор, который будет использоваться для всех сравнений (даже для равенства).

0 голосов
/ 23 марта 2012

Поскольку класс ArrayList уже оборачивает массив, вы можете расширить его и переопределить методы equals и hashCode.Вот пример:

public MyArrayList extends ArrayList<MyClass> {

    @Override
    public boolean equals(Object o) {
        if (o instanceof MyArrayList) {
            //place your comparison logic here
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        //just a sample, you can place your own code
        return super.hashCode();
    }
}

ОБНОВЛЕНИЕ:

Вы можете даже переопределить его для общего использования, просто изменив код на:

public MyArrayList<T> extends ArrayList<T> {
    //overrides the methods you need
    @Override
    public boolean equals(Object o) {
        if (o instanceof MyArrayList) {
            //place your comparison logic here
            return true;
        }
        return false;
    }
}
0 голосов
/ 23 марта 2012

Вы можете создать класс-оболочку для вашего массива и переопределить hashcode и равно соответственно. Например:

public class MyArrayContainer {
int[] myArray = new int[100];
@Override
public boolean equals(Object other) {
     if (null!= other && other instanceof MyArrayContainer){
     MyArrayContainer o = (MyArrayContainer) other;
     final int myLength = myArray.length; 
     if (o.myArray.length != myLength){
         return false;
     }
     for (int i = 0; i < myLength; i++){
         if (myArray[i] != o.myArray[i]){
              return false;
         }
     }
     return true;
     }
     return false;
}

@Override
public int hashCode() {
     return myArray.length;
}   
}
0 голосов
/ 23 марта 2012

Класс, который расширяет метод Set и переопределяет метод equals.

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