Hachage Ensemble et Tableau Liste les performances
J'ai mis en œuvre une méthode qui, tout simplement, des boucles autour d'un ensemble de fichiers CSV qui contient des données sur un certain nombre de module différent. Cela ajoute ensuite le "moduleName" dans un hashSet. (Code indiqué ci-dessous)
J'ai utilisé un hashSet qu'elle garantit pas de doublons sont insérés à la place d'une liste de tableaux qui aurait à utiliser le contenir() la méthode et parcourir la liste pour vérifier si il est déjà là.
Je crois à l'aide de la table de hachage a une meilleure performance que la liste du réseau.
Suis-je raison de dire que?
Aussi, quelqu'un peut-il m'expliquer:
- Comment travailler les performances pour chaque structure de données si on l'utilise?
-
Quelle est la complexité en utilisant le big-O notation?
HashSet<String> modulesUploaded = new HashSet<String>(); for (File f: marksheetFiles){ try { csvFileReader = new CSVFileReader(f); csvReader = csvFileReader.readFile(); csvReader.readHeaders(); while(csvReader.readRecord()){ String moduleName = csvReader.get("Module"); if (!moduleName.isEmpty()){ modulesUploaded.add(moduleName); } } } catch (IOException e) { e.printStackTrace(); } csvReader.close(); } return modulesUploaded;
}
- Vous voudrez probablement inclure les langues que vous utilisez comme l'un des balises (vous aurez à éliminer les uns les autres, mais la langue est presque sans aucun doute le plus important).
Vous devez vous connecter pour publier un commentaire.
Mon expérience montre que
HashSet
est plus rapide qu'uneArrayList
au départ de collections de 3 éléments inclusivement.Complet d'un tableau de résultats
Ils sont totalement différentes classes, donc la question est: quel type de comportement que vous voulez?
HashSet
assure il n'y a pas de doublons, vous donne un O(1)contains()
méthode mais n'a pas de préserver l'ordre.ArrayList
ne pas assurer il n'y a pas de doublons,contains()
est O(n), mais vous pouvez contrôler l'ordre des entrées.Avec beaucoup (quoi que cela signifie) entrées, oui. Avec de petites tailles de données, brutes de recherche linéaire pourrait être plus rapide que le hachage, cependant. Exactement où le seuil de rentabilité est, vous avez juste mesure. Mon sentiment est qu'avec moins de 10 éléments, en apparence linéaire est probablement plus rapide, avec plus de 100 éléments de hachage est probablement plus rapide, mais c'est juste mon sentiment...
De recherche à partir d'un HashSet est temps constant, O(1), à condition que le hashCode de la mise en œuvre des éléments est sain d'esprit. Linéaire look-up à partir d'une liste est linéaire dans le temps, O(n).
Il dépend de l'utilisation de la structure de données.
Vous de stocker les données dans
HashSet
, et pour votre cas pour le stockageHashSet
est mieux queArrayList
(comme vous ne voulez pas les entrées en double). Mais l'enregistrement n'est pas l'habitude d'intention.Cela dépend de la façon dont vous souhaitez lire et de traiter les données stockées. Si vous souhaitez un accès séquentiel ou aléatoire basée sur un index d'accès puis
ArrayList
est mieux ou si la commande n'a pas d'importance, alorsHashSet
est mieux.Si la commande de questions, mais que vous voulez faire beaucoup de modifications (ajouts et suppressions) la LinkedList est mieux.
Pour accéder à un élément particulier
HashSet
aura complexité en temps O (1), et si vous avez utiliséArrayList
il aurait été O (N) comme vous l'avez souligné vous auriez àiterate
par le biais de la liste et voir si l'élément n'est pas présent.