To naprawdę nie jest dobre porównanie, ponieważ takie podejście robić różne rzeczy:
Collections::unmodifiable...
tworzy niemodyfikowalne pogląd. Jest niezmienna, ponieważ zmienia się, jeśli zmieniasz oryginalną kolekcję kopii zapasowej (list
w twoim przykładzie).
...::of
z drugiej strony tworzy niezmienną kopię. Zmiana oryginalnej listy nie wpłynie na to.
Z widoku wydajności jest oczywiste, że tworzenie nie-modyfikowalnego opakowania jest tańsze, ponieważ tworzy tylko jedną instancję z jednym polem. Nowe metody fabryczne stworzą co najmniej jeden obiekt, być może wspierany przez tablicę (jeśli masz trzy lub więcej elementów), którą trzeba skopiować.
Dostęp może być szybszy w nowych niezmiennych kolekcjach, ale wymagałoby to porównania.
Ale poprawność podnosi wydajność. Co potrzebujesz Potrzebujesz? Jeśli potrzebujesz niezmiennej kopii, użyj nowych metod (lub Guva Immutable...
, które wolałbym). Jeśli potrzebujesz coś niezmiennego, użyj i wyrzuć oryginał (i upewnij się, że tak pozostanie). Jeśli potrzebujesz widoku, którego dzwoniący nie może edytować, użyj numeru unmodifiable...
.
Korzyści runtime z "unmodifiableList" na tworzenie. A jeśli 'string' jest' ArrayList', nie ma powodu dla 'List.of'. –
Możliwy duplikat [Jaka jest różnica między List.of i Arrays.asList?] (Https://stackoverflow.com/questions/46579074/what-is-the-difference-between-list-of-arrays- aslist) – Mark