Использование Java Collections.singletonList()?

Какая польза от Collections.singletonList() в Java? Я понимаю, что он возвращает список с одним элементом. Зачем мне нужен отдельный метод для этого? Как здесь играет роль неизменность?

Существуют ли какие-либо особые полезные варианты использования этого метода, а не просто удобный метод?

Ответ 1

Javadoc говорит следующее:

"Возвращает неизменный список, содержащий только указанный объект. Возвращенный список сериализуем."

Вы спрашиваете:

Зачем мне нужен отдельный метод для этого?

В первую очередь для удобства... чтобы вам не пришлось писать последовательность утверждений для:

  • создать пустой объект списка
  • добавить элемент к нему, и
  • оберните его неизменной оберткой.

Это также может быть немного быстрее и/или сэкономить немного памяти, но маловероятно, что эти небольшие сбережения будут значительными. (Приложение, которое создает огромное количество одноэлементных списков, по меньшей мере, необычно.)

Как здесь играет роль неизменность?

Это часть спецификации метода; см. выше.

Существуют ли какие-либо особые полезные варианты использования этого метода, а не просто удобный метод?

Ясно, что есть случаи, когда удобно использовать метод singletonList. Но я не знаю, как бы вы (объективно) различали обычный вариант использования и "особенно полезный"...

Ответ 2

Здесь один вид по методам singleton:

Я нашел, что эти различные методы "singleton" полезны для передачи одного значения API, для которого требуется коллекция этого значения. Конечно, это лучше всего работает, когда код, обрабатывающий переданное значение, не нужно добавлять в коллекцию.

Ответ 3

@param  the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.

import java.util.*;

public class HelloWorld {
    public static void main(String args[]) {
        // create an array of string objs
        String initList[] = { "One", "Two", "Four", "One",};

        // create one list
        List list = new ArrayList(Arrays.asList(initList));

        System.out.println("List value before: "+list);

        // create singleton list
        list = Collections.singletonList("OnlyOneElement");
        list.add("five"); //throws UnsupportedOperationException
        System.out.println("List value after: "+list);
    }
}

Используйте его, когда код ожидает список только для чтения, но вы хотите передать только один элемент. singletonList является безопасным и быстрым.

Ответ 4

Если коллекции Immutable/Singleton относятся к той, которая имеет только один объект и которая не изменяется в дальнейшем, то такая же функциональность может быть достигнута путем создания коллекции "UnmodifiableCollection", имеющей только один объект. Поскольку такая же функциональность может быть достигнута с помощью Unmodifiable Collection с одним объектом, то какое специальное назначение для Singleton Collection?

Ответ 5

Чтобы ответить на ваш неизменный вопрос:

Collections.SingletonList создаст неизменный список. Неизменяемый список (также называемый неизменяемым списком) не может изменять его содержимое. Методы добавления или удаления элементов будут вызывать исключения, если вы попытаетесь изменить содержимое.

Одиночный список содержит только этот элемент и не может быть изменен.

Ответ 6

singletonList может содержать экземпляр любого объекта. Состояние объекта можно изменить.

List<Character> list = new ArrayList<Character>();
list.add('X');
list.add('Y');
System.out.println("Initial list: "+ list);
List<List<Character>> list2 = Collections.singletonList(list);
list.add('Z');
System.out.println(list);
System.out.println(list2);

Мы не можем определить unmodifiableList, как указано выше.