5. 从数组创建ArrayList| Java Debug 笔记

108 阅读1分钟

本文正在参加「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,但是会出现以下问题

  1. 从asList返回的列表具有固定大小。因此,如果您希望能够在代码的返回列表中添加或删除元素,则需要将其包装在new中ArrayList。否则你会得到一个UnsupportedOperationException
  2. 返回的列表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