Créer une liste de tableaux de valeurs uniques
J'ai, en Java, une liste de tableaux avec des valeurs (nombre de lignes, c'est juste un extrait)
20/03/2013 23:31:46 6870 6810 6800 6720 6860 6670 6700 6650 6750 6830 34864 34272
20/03/2013 23:31:46 6910 6780 6800 6720 6860 6680 6620 6690 6760 6790 35072 34496
Où les deux premières valeurs sont des chaînes de caractères qui contient les données et sont stockés dans un seul élément.
Ce que je veux faire est de comparer les données de la chaîne éléments et en supprimant par exemple la deuxième, et tous les éléments visés à la ligne.
Pour l'instant, j'en ai utilisé un pour le cycle que tous les 13 éléments compare la chaîne (afin de comparer uniquement les données de chaînes de caractères)
Ma Question: puis-je mettre en œuvre d'autres de meilleures solutions?
C'est mon code:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Downsampler {
public static void main(String[] args) throws Exception{
//The input file
Scanner s = new Scanner(new File("prova.txt"));
//Saving each element of the input file in an arraylist
ArrayList<String> list = new ArrayList<String>();
while (s.hasNext()){
list.add(s.next());
}
s.close();
//Arraylist to save modified values
ArrayList<String> ds = new ArrayList<String>();
//
int i;
for(i=0; i<=list.size()-13; i=i+14){
//combining the first to values to obtain data
String str = list.get(i)+" "+list.get(i+1);
ds.add(str);
//add all the other values to arraylist ds
int j;
for(j=2; j<14; j++){
ds.add(list.get(i+j));
}
//comparing data values
int k;
for(k=0; k<=ds.size()-12; k=k+13){
ds.get(k); //first data string element
//Comparing with other strings and delete
//TODO
}
}
}
}
- Vous devriez poster votre question ici: codereview.stackexchange.com
- Le Code n'est pas terminé 1 accolades est manquant, de sorte s'il vous plaît poster complte code
- maintenant, devrait être ok, même si la comparaison des valeurs n'est pas mis en œuvre à tous
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Set.toArray()
méthode.http://docs.oracle.com/javase/6/docs/api/java/util/Set.html
Set.toArray()
ne pas garder les éléments de commande. Est-il un moyen de maintenir l'ordre?Essayez de vérifier les doublons avec un
.contains()
méthode sur la liste de tableaux, avant d'ajouter un nouvel élément.Il ressemblerait à quelque chose comme ceci
Qui devrait éviter les doublons dans la liste, ainsi que de ne pas gâcher l'ordre des éléments, comme les gens semblent chercher.
Vous pouvez utiliser un Ensemble. C'est une collection qui n'accepte pas les doublons.
Utilisation
Set
Vous pouvez facilement le faire avec un
Hashmap
. Vous avez évidemment une clé (qui est la Chaîne de données) et de certaines valeurs.Boucle sur toutes vos lignes et les ajouter à votre Carte.
Noter que dans ce cas, vous devrez garder les dernier occurence de lignes dupliquées. Si vous préférez garder la première occurence et en supprimant les autres, vous pouvez ajouter une case avec
Map.containsKey(String stringData);
avant de les mettre dans la carte.Assez en retard à la fête, mais voici mes deux cents:
Utiliser un
LinkedHashSet
Je suppose que vous avez besoin est une collection qui:
LinkedHashSet
fait cela. L'avantage par rapport à l'aide d'unArrayList
est queLinkedHashSet
a une complexité de O(1) pour lacontains
fonctionnement, par opposition àArrayList
, qui a O(n).bien sûr, vous avez besoin pour mettre en œuvre votre objet
equals
ethashCode
méthodes correctement.Juste Remplacer le booléen méthode equals() de l'objet personnalisé. Disons que vous avez une liste de tableaux avec champ personnalisé f1, f2, ... remplacer
et vérifier à l'aide de ArrayList exemple de la méthode contains (). C'est tout.
Si vous avez besoin de valeurs uniques, vous devez utiliser la mise en œuvre de la
SET
interfaceVous pouvez lire à partir du fichier de la carte, où la clé est la date et l'ignorer si la toute la ligne si la date est déjà dans la carte
- Je utiliser de la classe helper. Pas sûr que c'est bon ou mauvais
D'utilisation et de test:
Ou Java8 version: