【问题标题】:how to convert int[] to ArrayList [duplicate]如何将 int[] 转换为 ArrayList [重复]
【发布时间】:2013-12-03 06:27:13
【问题描述】:

我想知道如何在java中将int[]转换为Integer[]

基本上我想在java中将int[]转换为ArrayList

我找到了一些示例,但它们基于 Integer 对象而不是基于 int[]

参考: Convert int[] into ArrayList

谢谢

【问题讨论】:

  • 遍历int[]中的每个元素,并将其添加到List<Integer>中。
  • 您不能使用像List<T> 接口和ArrayList<T> 类这样的泛型,原始类型为int。您必须使用盒装类型Integer
  • 除此之外还有其他方法吗?因为如果我使用 traverse ,这将处于循环中,我将迭代超过 10k 次,不知道它会如何影响
  • 使用Arrays.asList(),如果你需要额外的功能,然后用它来初始化ArrayList
  • 如果您使用Integer.valueOf(int) 方法,Integer 实例会被缓存,因此您不会创建很多对象,如果您担心的话。

标签: java


【解决方案1】:
for(int i : yourArray) {
    yourArrayList.add(i);
}

应该这样做

【讨论】:

    【解决方案2】:

    类似这样的:

    int[] array = ...;
    List<Integer> list = new ArrayList<Integer>(array.length);
    for (int i : array) list.add(i);
    

    注意构造函数的参数。这会将底层数组的初始容量设置为所需的容量,以获得最佳性能。

    【讨论】:

    • 只使用 Arrays.asList(myArray) 有什么问题?我知道底层数组将是给定的数组,但我们为什么要创建一个新数组?
    • 好的,您将无法修改列表。如果它只是用于只读操作,你会没事的。 +1
    • @AlfredoOsorio:不,我想你不明白。它将创建一个带有一个元素的List&lt;int[]&gt;,即数组本身。
    • 您的代码将给出 ArrayIndexOutOfBoundsException - 异常
    【解决方案3】:
    int[] old = something;
    ArrayList<Integer> list = new ArrayList<Integer>();
    for (int x : old){
        list.add(x);
    }
    

    【讨论】:

      【解决方案4】:

      您必须将ints 包装到Integer 对象中,因为您无法创建List&lt;int&gt; 列表。

      int[] array = new int[1, 2, 3, 4, 5, 6];
      List<Integer> list = new ArrayList<Integer>(array.length);
      for (int i = 0; i < array.length; i++) {
        list.add(Integer.valueOf(array[i]);
      }
      

      【讨论】:

        【解决方案5】:

        您可以为此使用 guava 的 newArrayList()。

        【讨论】:

        • 哪一个?两个重载方法都不接受 int[]!
        【解决方案6】:

        如果您想从 int[] 中创建一个 List&lt;Integer&gt;,并且您关心的是性能(因此这里提供的所有其他答案对您来说仍然“太慢”),您可以编写自定义 List&lt;Integer&gt; 实现直接由int[] 支持:

        public class IntegerList extends AbstractList<Integer> implements List<Integer> {
            private final int[] data;
        
            public IntegerList(int[] data) { this.data = data; }
        
            @Override
            public Integer get(int index) { return data[index]; }
        
            @Override
            public int size() { return data.length; }
        }
        
        // usage
        List<Integer> myIntegerList = new IntegerList(myIntArray);
        

        缺点是:

        • 列表不可修改
        • 底层int[]的变化会影响列表实例。
        • 从您的ints 中创建Integer 对象仍然会发生,它只是推迟到调用get(int)

        【讨论】:

          【解决方案7】:

          我会使用 Apache Commons Lang 库中的 org.apache.commons.lang.ArrayUtilsint[] 转换为 Integer[],然后使用 Arrays.asList() 在列表中支持数组:

          import java.util.Arrays;
          import org.apache.commons.lang.ArrayUtils;
          
          int[] array = ...;
          List<Integer> list = Arrays.asList(ArrayUtils.toObject(array));
          

          【讨论】:

            猜你喜欢
            • 2012-05-03
            • 2014-04-30
            • 2014-05-15
            • 2019-03-15
            • 1970-01-01
            • 2013-10-16
            • 1970-01-01
            • 2019-05-17
            • 2018-04-12
            相关资源
            最近更新 更多