Gibt es Vorteile zwischen der Verwendung der Erstellung einer einzeiligen Liste mit com.google.common.collect.ImmutableList.of(...)
und java.util.Arrays.asList(...)
?JDK-Arrays im Vergleich zu Guavas ImmutableList
Antwort
Die Arrays.asList(...)
-Methode bietet eine Liste Ansicht des zugrunde liegenden Array.
Integer[] numbers = {17, 42, 2001};
List<Integer> list = Arrays.asList(numbers);
System.out.println(list.get(0)); // Prints 17.
list.remove(0); // throws.
numbers[0] = 1;
System.out.println(list.get(0)); // Prints 1.
list.set(0, 17);
System.out.println(numbers[0]); // Prints 17.
Arrays.asList
hat sehr wenig mit Unveränderlichkeit zu tun. In der zurückgegebenen Liste können keine Elemente hinzugefügt oder entfernt werden, sie kann jedoch geändert werden, und Änderungen ändern das zugrunde liegende Array. Tatsächlich ist die Klasse der zurückgegebenen Liste eine spezielle, die das Array für den Speicher verwendet. Es ist ähnlich zu diesem:
List<Integer> integers = new ArrayList<>();
integers.add(17);
integers.add(42);
integers.add(2001);
List<Integer> unmodifiable = Collections.unmodifiableList(integers);
unmodifiable.set(0, 1); // throws.
unmodifiable.remove(0); // throws.
unmodifiable.add(867_5309); // throws.
integers.set(0, 1) // okay.
System.out.println(unmodifiable.get(0)); // Prints 1.
Das ist nur sicher, wenn man die ursprüngliche Liste wegwirft, wie in diesem Kartenbeispiel. Da map
den Gültigkeitsbereich verlässt, kann nichts die zugrunde liegende Karte der nicht änderbaren Karte CAPITALS
ändern.
public static final Map<String, String> CAPITALS;
static {
Map<String, String> map = new HashMap<>();
map.put("USA", "Washington, DC");
map.put("England", "London");
// ...
CAPITALS = Collections.unmodifiableMap(map);
}
Guava der ImmutableList
erstellt eine neue Kopie der Daten, wenn die ursprünglichen Daten nicht unabänderlich selbst gespeichert ist. Zitiert seine docs:
Es ist nützlich, sich daran zu erinnern, dass ImmutableXXX.copyOf die Daten zu vermeiden versucht zu kopieren, wenn es sicher ist, dies zu tun - die genauen Details nicht näher bezeichnet sind, aber die Umsetzung ist in der Regel „smart“.
So hat Guava seine unveränderlichen Sammlungen unabhängig von ihren Ursprüngen.
List<Integer> original = new ArrayList<>();
original.add(1);
original.add(2);
original.add(3);
ImmutableList<Integer> immutable = ImmutableList.copyOf(original);
immutable.set(0, 42); // throws.
System.out.println(immutable.get(0)); // Prints 1.
original.set(0, 42); // fine.
System.out.println(immutable.get(0)); // Prints 1.
ImmutableList<Integer> copy = ImmutableList.copyOf(immutable);
// Shares immutable's data.
- 1. req.locals im Vergleich zu res.locals im Vergleich zu res.data im Vergleich zu req.data im Vergleich zu app.locals in Express-Middleware
- 2. Binäre Serialisierung im Vergleich zu JSON im Vergleich zu xml
- 3. App.Config im Vergleich zu AppName.exe.Config
- 4. ILookup im Vergleich zu IGrouping
- 5. FogBugz im Vergleich zu OnTime
- 6. Dateisperrung im Vergleich zu Semaphoren
- 7. XDocument.Descendants() im Vergleich zu DescendantNodes()
- 8. LocalBroadcastManager im Vergleich zu Callbacks
- 9. itertools.islice im Vergleich zu Listenscheibe
- 10. QDBusAbstractAdaptor im Vergleich zu QDBusAbstractInterface
- 11. Spray.Routing im Vergleich zu Play.api.mvc.Controller
- 12. DoubleBuffered im Vergleich zu SetStyle
- 13. Arrays im Vergleich zu JSON
- 14. AesManaged im Vergleich zu RijndaelManaged
- 15. Drupal7 im Vergleich zu Drupal6?
- 16. time.time im Vergleich zu timeit.timeit
- 17. ImmutableList erweitert List nicht?
- 18. MySQL-Vergleich Binäre Sortierung im Vergleich zu binären Strings
- 19. REST im Vergleich zu SOAP und im Vergleich zu einfacher Website, etc
- 20. Sicherheit von Tomcat im Vergleich zu WebSphere im Vergleich zu WebLogic
- 21. Ist Guavas UnmutableList.Builder thread sicher?
- 22. ImmutableList Aktualisierung auf Aktualisierungsliste referenziert
- 23. Scala Generika im Vergleich zu C#
- 24. MVVM ViewModel im Vergleich zu MVC ViewModel
- 25. Schlechte SVG-Qualität im Vergleich zu TIFF
- 26. Wie funktioniert Node.js im Vergleich zu Apache?
- 27. Wann preRenderView im Vergleich zu viewAction verwenden?
- 28. Set-Location im Vergleich zu SetCurrentDirectory
- 29. XML-Attribute im Vergleich zu Elementen
- 30. UIScreen Grenzen im Vergleich zu Application
+1 kurze Erklärung – ajduke