Betrachten Sie den folgenden Code:
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
einig Klasse soll ich nicht berühren. Es sollte eine bekommen ArrayList
als Argument. Vor diesem Tag haben wir auf diese Weise , weil wir nicht über die Reihenfolge scherte, deshalb haben wir Set
(so wird es nicht dupliziert werden). Aber jetzt, würde Ich mag die Reihenfolge der Elemente halten, so dass nach einigen Recherchen fand ich heraus , dass ich die Datenstruktur verwenden kann , LinkedHashSet
um dies zu tun. So tat ich:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
Das Problem ist, ich bin nicht sicher , wie zu konvertieren LinkedHashSet
zu ArrayList
. Auch ich dachte , die Verwendung , ArrayList
anstatt LinkedHashSet
so ich werde es nicht konvertieren müssen, aber ich werde zu iterieren über die Array ( O(n)
).
Was gut, sauber und effiect Weg soll ich verwenden?
Verwenden Sie einfach die public boolean addAll(Collection<? extends E> c)
Methode, auf der Arraylist, es jeder akzeptiert Collection
.
Sie haben Ihre LinkedHashSet
:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
und dann tun (können Sie diese auch verwenden , wenn mylist
nicht leer ist ):
List<String> myList = new ArrayList<>();
mylist.addAll(allPaths);
oder auch nur für einen einfacheren Ansatz:
List<String> myList = new ArrayList<>(allPaths);