从数组创建阵列列表?推荐| Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:从数组创建阵列列表?

我有一个样式,初始化为:

Element[] array = {new Element(1), new Element(2), new Element(3)};
复制代码

我想将此数组转换为阵列列表类的对象。

ArrayList<Element> arraylist = ???;
复制代码

高分回答:

new ArrayList<>(Arrays.asList(array));

复制代码

高分回答:

如果可以,请使用Guava(google 开源的库) 值得指出瓜瓦的方式, 这大大简化了这些诡计:

用法 对于不可改变列表 使用不可变列表类及其()和副本()工厂方法(元素不能无效):

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array
复制代码

对于可变列表 使用列表类及其新的列表()工厂方法:

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection
List<String> l2 = Lists.newArrayList(aStringArray);               // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
复制代码

另请注意其他类别中其他数据结构的类似方法,例如集中的数据结构。

为什么选择番石榴(guava)? 主要的吸引力可能是减少由于通用的类型安全造成的杂乱无章,因为使用番石榴工厂的方法允许在大部分时间推断类型。然而,自从Java 7与新的钻石运营商合作以来,这一论点就不那么有用了。

但这并不是唯一的原因(Java 7还不是无处不在):速记语法也非常方便,并且方法初始化器,如上所述,允许编写更具表现力的代码。你做在一个番石榴调用什么需要2与当前的Java集合。

如果你不能。。。 对于不可改变列表 使用 JDK 的阵列类及其asList()工厂方法,用集合包裹。

List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
复制代码

请注意,返回的类型为使用具体实现,但它不是。它是一种内部类型,它模拟了一个但实际上直接引用通过的数组,并使其"写通"(修改反映在阵列中)。asList()ListArrayListjava.util.ArrayListArrayList

它禁止通过 API 的某些方法进行修改,只需扩展一个(因此,添加或删除元素不受支持),但它允许呼叫覆盖元素。因此,这个列表不是真正的不可改变的,一个电话应该包裹。ListAbstractListset()asList()Collections.unmodifiableList()

如果您需要一个可变列表,请参阅下一步。

对于可变列表 与上面相同,但包裹着实际:java.util.ArrayList

List<String> l1  = new ArrayList<String>(Arrays.asList(array));    // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array));          // Java 1.7+
List<String> l2  = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b"));       // Java 1.7+
复制代码

用于教育目的:良好的手工方式

// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
  final List<T> l = new ArrayList<T>(array.length);

  for (final T s : array) {
    l.add(s);
  }
  return (l);
}

// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
  final List l = new ArrayList(array.length);

  for (int i = 0; i < array.length; i++) {
    l.add(array[i]);
  }
  return (l);
}
复制代码

文章翻译自 *.com/questions/2…

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞???? 求关注❤️ 求分享???? 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️

上一篇:一个细节 | Java中asList的缺陷


下一篇:SpringBoot拦截器使用Arrays.asList(),设置拦截与不拦截路径