Valoare duplicat în Java Set

Setarea Java nu poate avea o valoare duplicat. Acesta este codul meu:

Set set = new HashSet();
Collections.addAll(set, arr);

Dacă matricea arr are elemente care au aceeași valoare, setul va avea valoarea șirului duplicat, de ce se întâmplă?

Unde mi-a lipsit? Ar trebui să itectez matricea și să utilizez metoda de adăugare?

================================================== ===========

Ne pare rău, codul de mai sus funcționează. Am făcut o greșeală în arr. E o chestie de alb.

2
Îmi pare rău, am făcut o greșeală asupra matricei.
adăugat autor JR Galia, sursa
Ce conține arr ?
adăugat autor Jeffrey, sursa
Esti sigur? Orice șansă a unui exemplu complet, compilabil care demonstrează problema?
adăugat autor Tom Hawtin - tackline, sursa
Verificați dacă String conține orice caracter invizibil, cum ar fi spațiul alb.
adăugat autor Pau Kiat Wee, sursa
De unde știți că șirurile din matrice au valori duplicate?
adăugat autor QuantumMechanic, sursa

4 răspunsuri

Când rulez următorul cod, demonstrează că setul nu conține duplicate:

class FunkTest
{
    public static void main (String [] args)
    {
        Set theHash = new HashSet(); 

        String[] theArray = new String[] {
            "funky",
            "garbage",
            "funky",
            "stuff",
            "things",
            "item",
            "funky",
            "funky"
        };

        Collections.addAll(theHash, theArray);

        for (String thisItem : theHash) {
            System.out.println(thisItem);
        }
    }
}

ieşire:

stuff 
funky 
item 
things 
garbage

Trebuie să existe ceva diferit în ceea ce privește corzile tale.

2
adăugat
da, am facut o greseala asupra matricei.
adăugat autor JR Galia, sursa

Nu văd cum se întâmplă acest lucru, deoarece utilizați șiruri care au implementat corect.

Următorul cod imprimă "1" pentru ambele tablouri. Ești sigur că nu faci o greșeală?

import java.util.Set;
import java.util.HashSet;
import java.util.Collections;
class Main
{
    public static void main(String[] args)
    {
        String[] arr1 = new String[]{"one","one"};
        Set set1 = new HashSet();
        Collections.addAll(set1, arr1);
        System.out.println(set1.size());

        String[] arr2 = new String[]{"two",new String("two")};
        Set set2 = new HashSet();
        Collections.addAll(set2, arr2);
        System.out.println(set2.size());
    }
}
1
adăugat
Îmi pare rău, am făcut o greșeală asupra matricei. ce ar trebui să se facă în postul meu dacă problema se referă la greșeala OP?
adăugat autor JR Galia, sursa
Iată câteva sugestii: @ JRGalia - meta.stackexchange.com/questions/17753/…
adăugat autor Synesso, sursa

Cel mai probabil obiectele nu sunt de fapt egale, deci nu sunt acelasi obiect. Dacă te uiți la javadocs pentru java.util.HashSet.add() , veți vedea că comparația pentru a determina dacă un obiect este deja acolo utilizează .equals (). Asigurați-vă că sunteți 2 șiruri de caractere nu sunt diferite în nici un fel care ar face ca String.equals() să se întoarcă false.

1
adăugat

Te inseli. Un Set nu va conține niciodată un duplicat. Nu, nu este necesar să repetați și să utilizați metoda add .

Go back and take another look. What value(s) are duplicated? What happens if you add the array to a List instead?

0
adăugat