如何实现此方法:
List<Integer> toList(int[] integers) {
???
//return Arrays.asList(integers); doesn't work
}
如何实现此方法:
List<Integer> toList(int[] integers) {
???
//return Arrays.asList(integers); doesn't work
}
很可能有一个内置方法可以实现这个功能*(正如你所指出的,Arrays.asList
不能工作,因为它期望一个Integer[]
而不是int[]
)。
我不太了解Java库,无法告诉你在哪里找到它。但编写自己的方法非常简单:
public static List<Integer> createList(int[] array) {
List<Integer> list = new ArrayList<Integer>(array.length);
for (int i = 0; i < array.length; ++i) {
list.add(array[i]);
}
return list;
}
createList
方法。
*如果没有,我真的很想知道为什么没有。
new ArrayList<Integer>(array.length)
。这样可以避免Java在添加元素时重新调整集合大小。 - cHaoList<Integer> asList(final int[] integers) {
return new AbstractList<Integer>() {
public Integer get(int index) {
return integers[index];
}
public int size() {
return integers.length;
}
};
}
add(...)
是在AbstractList
中实现的。我的错,谢谢你提供的信息! - Bart Kiers使用commons-lang3 org.apache.commons.lang3.ArrayUtils.toObject(<你的整型数组>)
,然后再用java.util.Arrays.asList(<>)
ArrayUtils.toObject()
会复制该数组,而Arrays.asList()
只是创建一个由新数组支持的列表。
int[] a = {1, 2, 3};
List<Integer> aI = Arrays.asList(ArrayUtils.toObject(a));
编辑:如果您想通过列表接口调整大小并添加()
新元素,则此方法无效。如果您想能够添加新元素,可以使用new ArrayList()
,但这将创建一个副本。
List<Integer> xValues = Arrays.asList(new Integer[] { 150, 160, 175, 165, 165 });
来完成。 - Alexander PachaInteger[]
字面量工作,但不能使用现有的int[]
。它无法放置在OP的方法框架中。 - Dávid HorváthList<Integer> toList(int[] integers) {
// Initialize result's size to length of the incoming array
// this way it will not require reallocations
ArrayList<Integer> result = new ArrayList<Integer>( integers.length );
for ( int cur: integers )
{
result.add( Integer.valueOf( cur ) );
}
return result;
}
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class Listing {
public static void main(String[] args) {
int[] integers = {1,2,3,4};
java.util.List<Integer> list = new ArrayList<Integer>();
for (int i=0; i< integers.length; i++)
{
list.add(integers[i]);
}
System.out.println(list);
}
}
测试完成,符合预期!
很遗憾,我认为没有快速的方法来做到这一点。我相信你将不得不迭代数组并逐个添加。