本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:从数组创建ArrayList
我有一个像这样初始化的数组:
Element[] array = {new Element(1), new Element(2), new Element(3)};
我想将此数组转换为ArrayList类的对象。
ArrayList<Element> arraylist = ???;
回答1:
new ArrayList<>(Arrays.asList(array));
(也是十分简单的回答)
评论中提到:在通常情况下,我们所需要的也只是一个List,因此并没有必要使用new ArrayList,即
List<ClassName> list = Arrays.asList(array)
那么这样会出现什么问题呢?带着这个问题,我们看回答2
回答2:
// 在这种情况下
Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };
// 最简单的方法自然是:
List<Element> list = Arrays.asList(array);
这样可以实现将数组变为List,但是会出现以下问题
- 从asList返回的列表具有固定大小。因此,如果您希望能够在代码的返回列表中添加或删除元素,则需要将其包装在new中ArrayList。否则你会得到一个UnsupportedOperationException
- 返回的列表asList()由原始数组array支持。如果您修改原始数组,则列表也将被修改。这个问题一般会被人忽略。
回答3: 可以试试Guava
用法:
- 对于一个不可变的List:
我们可以使用ImmutableList类及其of()与copyOf()工厂方法
List<String> il = ImmutableList.of("string", "elements"); // 通过多个参数显式构造List
List<String> il = ImmutableList.copyOf(aStringArray); // 从数组变成List
- 对于一个可变的ArrayList
使用Lists类及其newArrayList()工厂方法:
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // 通过集合
List<String> l2 = Lists.newArrayList(aStringArray); // 通过一个数组
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // 多个参数显式的构造ArrayList