当前位置: 首页 > 知识库问答 >
问题:

如何创建ArrayList(ArrayList)从数组(int[])在Java

帅颖逸
2023-03-14

我已经看到了这个问题:从数组创建ArrayList

然而,当我用下面的代码尝试该解决方案时,它并不是在所有情况下都有效:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class ToArrayList {

    public static void main(String[] args) {
        // this works
        String[] elements = new String[] { "Ryan", "Julie", "Bob" };
        List<String> list = new ArrayList<String>(Arrays.asList(elements));
        System.out.println(list);

        // this works
        List<Integer> intList = null;
        intList = Arrays.asList(3, 5);
        System.out.println(intList);

        int[] intArray = new int[] { 0, 1 };
        // this doesn't work!
        intList = new ArrayList<Integer>(Arrays.asList(intArray));
        System.out.println(intList);
    }
}

我做错了什么?代码不应该intList=new ArrayList吗


共有3个答案

越心水
2023-03-14

问题是关于自动装箱。Java会自动将int转换为Integer,但不会将int[]转换为Integer[]。这就是原因。

public static <T> List<T> asList(T... a)

asList的定义如上所述。它需要类型为T的vararg。i、 e.它可以获取T类型的对象数组。在您的例子中,因为Java无法将int[]转换为Integer[],因此它将T类型作为int[]而不是按照需要的Integer。因此,您会得到一个类型为list的列表

Joshua Bloch的书《高效Java》中有一个很好的条目,他用varargs解释了坑,这就是其中之一。

冯宏恺
2023-03-14

使用Java 8,只需一行即可完成:

        
int[] intArr = { 1, 1, 2, 3, 5, 8, 11};  
List<Integer> list = Arrays.stream(intArr).boxed().collect(Collectors.toList());  
list.forEach(System.out::println);
班浩皛
2023-03-14

问题在于

intList = new ArrayList<Integer>(Arrays.asList(intArray));

就是说,int[]被视为一个对象实例,因为一个基本数组从对象扩展而来。如果您使用的是Integer[]而不是int[],那么这将起作用,因为现在您正在发送一个对象的数组。

Integer[] intArray = new Integer[] { 0, 1 };
//now you're sending a Object array
intList = new ArrayList<Integer>(Arrays.asList(intArray));

根据您的评论:如果您仍然想使用int[](或另一个基本类型数组)作为主数据,那么您需要使用包装器类创建一个额外的数组。例如:

int[] intArray = new int[] { 0, 1 };
Integer[] integerArray = new Integer[intArray.length];
int i = 0;
for(int intValue : intArray) {
    integerArray[i++] = intValue;
}
intList = new ArrayList<Integer>(Arrays.asList(integerArray));

但是,由于您已经在为循环使用,我不介意使用临时包装器类数组,只需将您的项目直接添加到列表中:

int[] intArray = new int[] { 0, 1 };
intList = new ArrayList<Integer>();
for(int intValue : intArray) {
    intList.add(intValue);
}

 类似资料:
  • 问题内容: 我看到了一个问题:从数组创建ArrayList 但是,当我使用以下代码尝试该解决方案时,它并不能在所有情况下都有效: 我在这里做错了什么?代码不应该编译就好吗? 问题答案: 问题在 是,被认为是一个单一的,因为基本数组从延伸实例。如果你有这样的工作,而不是因为现在你要发送的数组。 根据您的评论:如果您仍然想使用一个(或另一个原始类型的数组)作为主要数据,那么您需要使用wrapper类创

  • 问题内容: 我有一个像这样初始化的数组: 我想将此数组转换为ArrayList 问题答案:

  • 本文向大家介绍如何从Java ArrayList创建字符串?,包括了如何从Java ArrayList创建字符串?的使用技巧和注意事项,需要的朋友参考一下 要将ArrayList的内容转换为String,创建一个StringBuffer对象,将ArrayList的内容附加到该对象,最后使用toString()方法将StringBuffer对象转换为String 。 示例 输出结果

  • 问题内容: 我想创建一个二维数组,每个单元格都是一个! 我认为这是定义,但我不能在其中添加任何内容,这些定义是真的吗? 要么 请帮我 问题答案: 我想创建一个二维数组,每个单元格都是一个ArrayList! 如果要创建一个2D 数组 ,则可以执行以下操作:

  • 如何创建包含ArrayList的二维数组?比如:

  • 问题内容: 无论如何,我对ArrayLists还是很陌生,但是我在这个项目中需要它们,如果你们能帮助我,我将不胜感激! 基本上,我需要创建一个多维数组列表来保存字符串值。我知道如何使用标准数组来执行此操作,但是这样做并不好,因为我不知道数组的大小,我所知道的只是它会有多少个尺寸。 因此,如果你们知道如何制作“具有2 / +尺寸的可动态调整大小的数组”,请告诉我。 在此先感谢, 安迪 编辑/更新 也