Java Integer []到int []

时间:2014-05-29 23:22:01

标签: java arraylist casting

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

目前我这样做:

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();

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

4 个答案:

答案 0 :(得分:2)

这可以使用List界面中的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); 

答案 1 :(得分: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]在索引操作之前的每个循环中从列表创建 new 数组。这使得复制品的复杂度为O(n ^ 2)+!虽然可以通过用filters.get(i)替换有问题的表达式来解决这个问题,但在这种情况下可以完全跳过索引操作。

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

答案 2 :(得分:1)

而不是:

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

您可以像这样检索元素:

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

答案 3 :(得分:1)

int[] filteres = new int[filters.size()];
        for(int i =0;i<filters.size();i++){
            filteres[i]=filters.get(i);
        }