如何使用N-1个相等的对象+ 1个不同的对象创建List <T>?

Ale*_*rin 3 java list java-8

我发现Collections.nCopies但它返回ImmutableList所以我无法使用add().

最可读的方法是什么?

Era*_*ran 5

将不可变ListArrayList构造函数传递给:

List<YourClass> list = new ArrayList<>(Collections.nCopies (n-1, object1));
list.add(object2);
Run Code Online (Sandbox Code Playgroud)

要么

List<YourClass> list = new ArrayList<>(Collections.nCopies (n, object1));
list.set(someIndex, object2);
Run Code Online (Sandbox Code Playgroud)

在Java 8中,您可以使用Streams:

List<YourClass> list = 
    IntStream.range(0,n)
             .mapToObj(i -> i != specialIndex ? object1 : object2)
             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @AlexAlex由`Collections.nCopies`返回的原始不可变列表需要O(1)内存,因此无需担心它.为了拥有一个可变的List,你不能避免创建一个占用线性空间的List. (4认同)