Проблема с использованием Collections.unmodifiableList
заключается в том, что вы на самом деле не создаете представление только для чтения для изменяемой коллекции, а не реальную неизменяемую коллекцию.Может показаться, что это не имеет большого значения, но на самом деле изменяемая коллекция, действующая как неизменяемая, не будет очень эффективной и производительной.Например, добавление нового элемента в список потребует копирования всего списка.
Я бы посоветовал вам проверить Vavr .Он имеет собственную реализацию функционального, неизменного связанного списка , который позволяет выполнять добавления в постоянное время (что не требует копирования всего списка, поскольку общие элементы являются общими).Например:
var l1 = List.of(1, 2, 3); //List(1, 2, 3)
var l2 = l1.append(4); //List(1, 2, 3, 4)
В этом примере оба списка будут разделены на 1,2,3.
Вы также можете легко конвертировать из и в список Java:
java.util.List<String> javaList = Arrays.asList("Java", "Haskell", "Scala");
List<String> vavrList = List.ofAll(javaList);
List<String> vavrStringList = List.of("JAVA", "Javascript", "Scala");
java.util.List<String> javaStringList = vavrStringList.toJavaList();