Arraylist Egal de lucru (Programare, Java)

Amit a intrebat.

Aveți o îndoială în ceea ce privește metoda Equals de lucru în Array List, mai jos codul de mai jos este imprimat adevărat.

     ArrayList<String> s = new ArrayList<String>();

     ArrayList<Integer> s1 = new ArrayList<Integer>();

     System.out.println(s1.equals(s));

Are cineva o idee de ce se dă un răspuns adevărat?

Comentarii

  • pentru că ambele sunt goale…, aruncați o privire în metoda Equals din ArrayList –  > Por SomeJavaGuy.
  • Notă: s == s1 va returna fals.  > Por lance-java.
  • a se vedea acest răspuns explică totul –  > Por karim mohsen.
  • O altă notă: Tipurile generice pierdut în timpul execuției din cauza ștergerea tipurilor –  > Por lance-java.
  • @LanceJava pentru (==) există tipuri de operanzi incompatibile ArrayList<String> și ArrayList<Integer> –  > Por Mourad BENKDOUR.
4 răspunsuri
Suresh Atta

Uitați-vă la doc pentru equals() din ArrayList

Returnează true dacă și numai dacă obiectul specificat este, de asemenea, o listă, ambele liste au aceeași dimensiune și toate perechile corespunzătoare de elemente din cele două liste sunt egale.

Deoarece nu există elemente, toate condițiile sunt îndeplinite și, prin urmare, se aplică metoda true.

Dacă adăugați elemente în ambele liste (cel puțin unul în fiecare), pentru a vedea rezultatul dorit.

Comentarii

  • Dacă ambele liste ar avea câte un element, setat la null – cum ar fi atunci comparația? Doar după valoare sau și după tip? –  > Por Jeppe.
  • @JeppeRask null este egal cu null 🙂 –  > Por Suresh Atta.
Adam Michalik

Contractul de List.equals este că două liste sunt egale dacă toate elementele lor sunt egale (în termeni de equals()). În cazul de față, ambele sunt liste goale, deci sunt egale. Tipul generic este irelevant, deoarece oricum nu există elemente de listă care să fie comparate.

Cu toate acestea, ele nu sunt egale în termeni de == deoarece acestea sunt două obiecte diferite.

Consultați această întrebare pentru detalii între equals() și ==

SomeJavaGuy

Iată implementarea ArrayList a metodei equals din AbstractList cu câteva comentarii despre ceea ce face de fapt:

public boolean equals(Object o) {
   if (o == this) // Not the same list so no return
       return true;
   if (!(o instanceof List)) // is an instance of List, so no return 
       return false;

   ListIterator<E> e1 = listIterator();
   ListIterator<?> e2 = ((List<?>) o).listIterator();
   while (e1.hasNext() && e2.hasNext()) { // Both have no next, so no loop    here
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
   }
   return !(e1.hasNext() || e2.hasNext()); // Both validate to false, so negating false return true in the end.
} 

Farrandu

Așa cum au arătat răspunsurile anterioare, equals returnează true deoarece ambele obiecte sunt instanțe ale lui List și au aceeași dimensiune (0).

De asemenea, merită menționat faptul că faptul că unul dintre List conține Integer iar celălalt String nu afectează comportamentul, deoarece ștergerea tipului în Java.

Tags: