2017-02-13 4 views
1

Ich speichere Identifikationsadressen in meiner ArrayList. Das Problem ist, dass ich es immer wieder speichere.Duplizierung eines Elements in einer ArrayList

Hier ist der relevante Code:

public void storeIDs(final String emailAddress) { 
    SharedPreferences.Editor editor = context.getSharedPreferences("storeIds", MODE_PRIVATE).edit(); 
    IDAddresses.add(emailAddress); 

    for(int i=0;i<IDAddresses.size();i++) 
    { 
     editor.putString("value"+i,IDAddresses.get(i)); 
    } 
    editor.putInt("emailListSize",IDAddresses.size()); 
    editor.apply(); 
} 

Wie kann ich überprüfen, ob die emailAddress bereits in der Arraylist existiert IDAddresses und wenn es vorhanden ist, nicht es dann speichern?

+6

warum nicht ein 'Set' mit? – Kent

Antwort

0
//use this : 
if(!IDAddresses.contains(emailAddress)){ 

    IDAddresses.add(emailAddress); 

} 

//instead of just this : 
IDAddresses.add(emailAddress); 
0
SharedPreferences sh = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
if(sh.Contains(IDAddresses.get(i)){//do nothing} 
else editor.putString("value"+i,IDAddresses.get(i)); 
2

Von dem, was Sie beschrieben, Set ist die Datenstruktur Sie wählen sollten.

  • Set wird nicht Speicher kopiert (equals()) Elemente, so dass Sie sich
  • nicht überprüfen und hinzufügen Wenn Sie überprüfen müssen, ob ein Element in Ihrer Sammlung vorhanden ist, ein Hashtable Basis Set (Z.B HashSet) contains() O(1) wird schneller sein als ArrayList.contains() O(n)
0

Als @Kent vorgeschlagen, Sie Set dafür verwenden soll.

Eine Sammlung, die keine doppelten Elemente enthält. Formal enthalten Sätze kein Paar von Elementen e1 und e2, so dass e1.equals (e2) und höchstens ein Nullelement.

Set<String> IDAddresses = new HashSet<>(); 

Und dann:

IDAddresses.add(emailAddress); 

Ein anderer Weg, dies zu tun, was nicht empfohlen, aber wenn du gehst ArrayList sowieso zu verwenden:

List<String> noDupes = Lists.newArrayList(Sets.newHashSet(IDAddresses)); 

Grundsätzlich entfernt Duplikate durch Umwandlung der ArrayList in eine HashSet. Verwendet Guava.

Wenn Sie mit Java 8 Sie können auch von lamdas machen:

List<String> noDupes= IDAddresses.stream().distinct().collect(Collectors.toList()); 
0

Verwenden Sie einfach ArrayList.contains (desiredElement). Zum Beispiel, wenn Sie für das conta1 Konto von Ihrem Beispiel suchen, könnten Sie so etwas wie verwenden:

if (IDAddresses.contains(i)) { 
    System.out.println("Account found"); 
} else { 
    System.out.println("Account not found"); 
} 

ich nicht diese method.You versucht habe diese Methode ArrayList.contains verwenden (desiredElement) für Überprüfung des Wertes existiert in Arraylist oder nicht.

Bitte gehen Sie über diesen Link Check if a value exists in ArrayList

+0

Verwenden Sie diese if-Bedingung innerhalb der for-Schleife. –

Verwandte Themen