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这可以使用列表界面中的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.parseInt 是在 Java 中将 String 转换为 Int 的最佳方法?