在Java中将数组转换为列表

如何将数组转换为Java中的列表?

我使用了Arrays.asList()但行为(和签名)以某种方式从Java SE 1.4.2(现在存档的文档)更改为8,并且我在网上找到的大多数代码片段都使用1.4.2行为。

例如:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • 在1.4.2上返回一个包含元素1,2,3的列表
  • 在1.5.0+上返回一个包含数组垃圾邮件的列表
  • 在很多情况下,应该很容易发现,但有时可能会被忽视:

    Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
    

    在你的例子中,这是因为你不能有一个基本类型的列表。 换句话说, List<int>是不可能的。 但是,您可以有一个List<Integer>

    Integer[] spam = new Integer[] { 1, 2, 3 };
    Arrays.asList(spam);
    

    这按预期工作。


    问题在于,可变参数引入了Java5,不幸的是, Arrays.asList()也使用了可变参数版本。 所以Arrays.asList(spam)被Java5编译器理解为int数组的可变参数。

    有效Java第2版,第7章,第42项更详细地解释了这个问题。


    谈到转换方式,这取决于你为什么需要你的List 。 如果你只是需要它来读取数据。 好的,在这里你去:

    Integer[] values = { 1, 3, 7 };
    List<Integer> list = Arrays.asList(values);
    

    但是,如果你做这样的事情:

    list.add(1);
    

    你得到java.lang.UnsupportedOperationException 。 所以在某些情况下,你甚至需要这样做:

    Integer[] values = { 1, 3, 7 };
    List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));
    

    第一种方法实际上并不转换数组,而是像“ List ”那样“代表”它。 但是数组的所有属性都像固定数量的元素一样。 请注意,您在构建ArrayList时需要指定类型。

    链接地址: http://www.djcxy.com/p/72747.html

    上一篇: Converting array to list in Java

    下一篇: Highlight selected table row