我想要一个长度可变的整数数组。显而易见的选择是使用ArrayList,但我可以为原始类型(如
)执行此操作ArrayList<int> myArray=new ArrayList<int>();
我不想使用
ArrayList<Integer>
因为Integer类在编码方面很笨拙。
编辑:从下面的答案我认为解决方案是编写我自己的Integer类。
要回答下面关于“笨拙”的问题让我给出一个具体的,我会想到整数的常用,即在任何想要整数的地方使用数组的最后一个成员。如果我只是调用数组“name”然后获取可以操作的实际整数
name.get(name.size()-1).intValue();
对我来说,这对于一个简单的整数来说似乎是一个非常笨拙的表达式 - 特别是如果它出现在表达式中两次。似乎(大多数)可用于Integer类的方法绝对是多余的。举两个例子
static int compare(int a, int b)
令人难以置信的是,根据文档,这个方法返回a-b !!
static Integer valueOf(int a)
返回整数a的Integer实例。有人可以给我一个例子吗
new Integer(a)
没有达到完全相同的结果?
答案 0 :(得分:2)
您可以执行类似的操作,但这会使代码加倍并且效率不高:
int[] a;
//get size (from command line maybe ow whatever method you want)
您最初可以设置尺寸0,例如您正在从arraylist
转移值,因此您必须写:
while(itr.hasNext()){
size++;} //itr is an object of Iterator
int i=0;
a=new int[size];
// then loop again to store values
while(itr.hasNext()){
a[i]=itr.next();
i++;}
或者您可以使用ArrayList
而不会使其笨拙,如下所示:
ArrayList al = new ArrayList();
然后你可以将Integer对象声明为volatile
并对它们执行操作,就像处理基元类型一样。
或者简单地写一下:
ArrayList al=new ArrayList();//ignore the warning about <E>
int x=2;
al.add(2);
如果我是你,我会使用ArrayList<Integer>
。
更新:可能有效的另一件事是您最初可以创建ArrayList<Integer>
并在那里存储值,然后将其转换为int[]
This所以答案讲述转换。引用代码表格:
public static int[] convertIntegers(List<Integer> integers)
{
int[] ret = new int[integers.size()];
for (int i=0; i < ret.length; i++)
{
ret[i] = integers.get(i).intValue();
}
return ret;
}
希望这有帮助。
答案 1 :(得分:1)
不可以将原始类型用作泛型类型。
答案 2 :(得分:0)
我建议您使用ArrayList并避免使用原始类型。
创建后,您无法更改数组的大小。你必须分配比你认为的更大的
或
接受必须将其重新分配到新的更大阵列并将数据从旧数据复制到新数据的开销:
System.arraycopy(oldItems, 0, newItems, 0, 10);
但是使用ArrayList更简单。