Java Integer[] 到 int[] [重复]

Posted

技术标签:

【中文标题】Java Integer[] 到 int[] [重复]【英文标题】:Java Integer[] to int[] [duplicate] 【发布时间】:2014-07-19 14:58:39 【问题描述】:

我有一个需要转换为 int 数组 (int[]) 的 List

目前我正在这样做:

List<Integer> filters = new ArrayList<Integer>();
// add some elements to filters
int[] filteres = new int[filters.size()];
for(Integer i=0 ; i<filters.size(); i++) 
    filteres[i] = filters.toArray(
                  new Integer[filters.size()])[i].intValue();

我认为这看起来像是一个混乱的解决方法,应该以其他方式来做到这一点。 那么有没有更好的方法来进行这种转换呢?

【问题讨论】:

filters.toArray(new Integer[filters.size()])[i] - 这是完全没有必要和浪费的;有人需要学习索引到 List(或者,使用增强的 for 循环完全跳过索引) 另外,你的标题是谎言。操作是 List 到 int[],而不是 Integer[] 到 int[]。 【参考方案1】:

这可以使用列表界面中的List.get() 来简化:

int[] filteres = new int[];
for(int i=0 ; i<filters.size(); i++) 
   //auto unboxing takes care of converting Integer to int for you, if it's not null.
    filteres[i] = filters.get(i); 

【讨论】:

增强的 for 循环将是更好的选择(因为它使用迭代器),因为 get(int index) 对于某些 List 实现 (LinkedList) 可能会很慢【参考方案2】:

见How to convert List<Integer> to int[] in Java?(无论如何都是重复的;见this answer in particular)。

但是,为了便于讨论,请考虑这个类似的替代方案和注释。

List<Integer> filters = getFilters();

// Arrays must be created with a size: the original code won't compile.
int[] ints = new int[filters.size()];

// Use an Enhanced For Loop if an index lookup into the source
// is not required; i is merely a result of needing to index the target.
int i = 0;
for(Integer filter : filters) 
    // Just use auto unboxing Integer->int; no need for intValue()
    ints[i++] = filter;

原始代码是糟糕,因为filters.toArray(new Integer[filters.size()])[i] 在索引操作之前的每个循环中都会从列表中创建一个 数组。这使得复杂度 O(n^2)+ 仅用于副本!虽然可以通过用filters.get(i) 替换有问题的表达式来解决此问题,但在这种情况下可以完全跳过索引操作。

使用类似于上面所示的可枚举方法(即使用enhanced for loop)的优点是它将继续有效地处理不能快速索引的源集合,例如LinkedList。 (即使使用filters.get(i) 替换,LinkedList 源集合也会导致转换复杂度为 O(n^2) - 哎呀!)

【讨论】:

【参考方案3】:

而不是这个:

filteres[i] = filters.toArray(
              new Integer[filters.size()])[i].intValue();

你可以像这样检索元素:

filteres[i] = filters.get(i);

【讨论】:

【参考方案4】:
int[] filteres = new int[filters.size()];
        for(int i =0;i<filters.size();i++)
            filteres[i]=filters.get(i);
        

【讨论】:

以上是关于Java Integer[] 到 int[] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java int[] 数组到 HashSet<Integer>

《Java架构筑基》从Java基础讲起——Int和Integer深入分析

Integer类

Integer.parseInt 是在 Java 中将 String 转换为 Int 的最佳方法?

Java中List, Integer[], int[]的相互转换

请问java中怎样将Integer类型的对象赋值给int