Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Зачем нужен метод Arrays.asList()?

#java


Зачем нужен метод Arrays.asList() ? В чем его суть?
    


Ответы

Ответ 1



Как и следует из документации: формирует список на основе массива. Массив при этом используется для внутреннего представления списка. Таким образом сохраняется связь между списком и исходным массивом: изменения в массиве отразятся на списке: String[] a = { "foo", "bar", "baz"}; List list = Arrays.asList(a); System.out.println(list); // [foo, bar, baz] a[0] = "aaa"; System.out.println(list); // [aaa, bar, baz] изменения в списке отразятся на массиве: String[] a = { "foo", "bar", "baz"}; List list = Arrays.asList(a); System.out.println(list); // [foo, bar, baz] list.set(0, "bbb"); System.out.println(Arrays.toString(a)); // [bbb, bar, baz] Если массив содержит объекты, очевидно, и массив и список будут ссылаться на одни и те же экземпляры: Object[] a = { new Object(), new Object(), new Object()}; List list = Arrays.asList(a); System.out.println(a[0] == list.get(0)); // true Как уже упомянул @Oleg Chiruhin, тот факт, что метод принимает в качестве параметра массив в форме аргументов переменной длины, позволяет использовать его для относительно удобной инициализации списков: List list = Arrays.asList(new Foo(...), new Foo(...), new Foo(...)); сравните с List list1 = new ArrayList<>(); list.add(new Foo(...)); list.add(new Foo(...)); list.add(new Foo(...));

Ответ 2



Кроме того что описано в JavaDoc, практическая суть этого метода в том, что довольно часто на вход метода нужно прислать именно список, элементы которого заранее известны (н-р какой-то набор магических констант, что часто требуется для быстрого написания TDD-тестов). Но для инициализизации списка in-place, прямо по месту вызова, в Java нет красивого синтаксиса. Поэтому можно вызывать это просто в синтаксисе mymethod(Arrays.asList("Новосибирск", "Москва", "Кукуево")). Заметьте, что я смог провести инициализацию листа даже внутри предложения на русском языке!

Комментариев нет:

Отправить комментарий