porównanie tablic metodą equals

0

public class Main {
@Override
public int hashCode() {
return super.hashCode();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

public static void main(String[] args) {

    int[] numbers1 = new int[3];
    System.out.println("Tablica 1: ");
    for (int i = 0; i < numbers1.length; i++) {
        numbers1[i] = i + 1;
    }

    for (int x: numbers1) {
        System.out.println(x);
    }

    System.out.println("\n");

    int[] numbers2 = new int[3];
    System.out.println("Tablica 2: ");
    for (int i = 0; i < numbers2.length; i++) {
       numbers2[i]= i + 1;
    }

    for (int y: numbers2) {
        System.out.println(y);

    }

    System.out.println("\n");
    boolean porownanieTablic = numbers1.equals(numbers2);

    System.out.println("Porównanie tablic: " + porownanieTablic);

Czy może ktoś mi wyjaśnić dlaczego przy porównaniu dwóch tablic z tymi samymi wartościami pojawia się "false"?

7

Do porównywania tablic są metody:

  • java.util.Arrays.equals
  • java.util.Arrays.deepEquals

Tablice mają nienadpisaną metodę equals, więc array1.equals(array2) to to samo co array1 == array2.

5

J/w. Equals porównuje w Twoim przypadku czy to są te same referencje na tablice a nie te same tablice pod względem wartości.

0

@Wibowit: Chcę pozostać przy tablicy. Bo rozumiem, że musiał bym zamienić tablicę na listę i wtedy porównać metodą equals?

3
luki25591 napisał(a):

@Wibowit: Chcę pozostać przy tablicy

Jest jakiś logiczny powód dlaczego chcesz pozostać przy tablicy? Gola tablica w Javie jest bardzo ubogą strukturą. W większości wypadków lepszym rozwiązaniem będzie ArrayList.

Przy okazji, fragment:

@Override
public int hashCode() {
return super.hashCode();
}

@Override
public boolean equals(Object obj) {
    return super.equals(obj);
}

nie daje żadnego dodatkowego rezultatu. Ręcznie napisałeś zachowanie domyslne.
Także implementacji metod hashCode i equals dla klas nie pisadających danych instancji (jak twój main) także nie daje żadnej korzysci. Nawet nie tworzysz instancji klasy Main więc te metody nie zostaną nigdy wywołane

4
luki25591 napisał(a):

@Wibowit: Chcę pozostać przy tablicy. Bo rozumiem, że musiał bym zamienić tablicę na listę i wtedy porównać metodą equals?

Możesz jak najbardziej pozostać przy tablicy i tak jak masz napisane użyj metody Arrays.equals()
screenshot-20211015153853.png

0

Wielkie dzięki za pomoc. Pozdrawiam.

0

Na ..ja potzrebne porównywanie Main'a do Main'a ?

Która w dodatku klasa nie posiada żadnych danych?

1 użytkowników online, w tym zalogowanych: 0, gości: 1