Considérez le code suivant:
final Set<String> allPaths = new HashSet<String>();
for (final String path: paths) {
allPaths.add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
MyData
est une classe que je ne devrais pas toucher. Il devrait obtenir un ArrayList
argument. Avant ce jour, nous avons utilisé de cette façon parce que nous ne tenions pas de l'ordre, c'est la raison pour laquelle nous avons utilisé Set
(donc il n'y aura pas dupliqués). Mais maintenant, je voudrais garder l'ordre des éléments, donc après quelques recherches, j'ai découvert que je peux utiliser la structure de données LinkedHashSet
afin de le faire. Alors je l' ai fait:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
Le problème est, je ne suis pas sûr de savoir comment convertir LinkedHashSet
à ArrayList
. De plus, je pensé à utiliser au ArrayList
lieu de LinkedHashSet
je ne vais pas le convertir, mais je vais devoir parcourir la gamme ( O(n)
).
A quoi bon, manière propre et effiect dois-je utiliser?
Il suffit d' utiliser la public boolean addAll(Collection<? extends E> c)
méthode, sur le arrayList, il accepte tout Collection
.
Vous avez votre LinkedHashSet
:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
puis faites (vous pouvez utiliser ce même si mylist
est vide pas):
List<String> myList = new ArrayList<>();
mylist.addAll(allPaths);
ou même pour une approche plus simple:
List<String> myList = new ArrayList<>(allPaths);