我有一个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();
我认为这看起来像一个混乱的解决方法,应该以其他方式做到这一点。 那么有更好的方法进行这种转换吗?
答案 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);
}