web-dev-qa-db-fra.com

Enregistrer une liste de chaînes uniques dans la liste de tableaux

Je lis les données d'un fichier texte, il peut donc y avoir:

 John 
 Mary 
 John 
 Leeds 

J'ai maintenant besoin d'obtenir 3 éléments uniques dans ArrayList, car il n'y a que 3 valeurs uniques dans la sortie du fichier (comme ci-dessus).

Je peux utiliser un HashTable et y ajouter des informations, puis simplement copier ses données dans la liste. Y a-t-il d'autres solutions?

36
EugeneP

Pourquoi avez-vous besoin de le stocker dans un List? Avez-vous réellement besoin de commander les données ou de prendre en charge les recherches basées sur un index?

Je suggère de stocker les données dans un Set. Si la commande n'est pas importante, vous devez utiliser HashSet. Cependant, si vous souhaitez conserver la commande, vous pouvez utiliser LinkedHashSet.

75
Adamski

Si vous avez un List contenant des doublons et que vous voulez un List sans, vous pouvez faire:

List<String> newList = new ArrayList<String>(new HashSet<String>(oldList));

Autrement dit, encapsulez l'ancienne liste dans un ensemble pour supprimer les doublons et encapsulez à nouveau cet ensemble dans une liste.

66
Fabian Steeg

Vous pouvez vérifier list.contains () avant d'ajouter.

if(!list.contains(value)) {
    list.add(value);
}

J'ai deviné que ce serait évident! Cependant, ajouter des éléments à un HashSet puis créer une liste à partir de cet ensemble serait plus efficace.

17
Chandra Sekar

Utilisez un set au lieu d'une liste. Jetez un oeil ici: Tutoriels sur les collections Java et spécifiquement sur les ensembles ici: Tutoriel sur les ensembles Java

En un mot, les ensembles contiennent quelque chose. Parfait :)

4
Tom Duckering

Voici comment je l'ai résolu:

import groovy.io.*;
def arr = ["5", "5", "7", "6", "7", "8", "0"]
List<String> uniqueList = new ArrayList<String>(new HashSet<String>( arr.asList() ));
System.out.println( uniqueList )
2
djangofan