我设置了一个如下所示的整数数组
int[] a = new int[11111];
//if I set
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
我想要一个让它给我的方法 4但是11111。 有什么方法可以用吗?
答案 0 :(得分:7)
您应该考虑使用ArrayList
ArrayList<Integer> myList=new ArrayList<Integer>();
myList.add(1);
myList.add(2);
myList.add(3);
System.out.println("Size:"+myList.size());
答案 1 :(得分:3)
嗯,以下方法可以满足您的要求:
public int m() {
return 4;
}
假设您需要一个接受数组的方法,并返回已填充的最大索引 - 您是正确的a.length
仅告诉您数组的大小,即数量分配的细胞。
这比你预期的要困难,特别是对于int
数组。那些未分配的单元格初始化为0
的值。如果您实际上可能在数组中使用零值,那么绝对无法判断单元格中的值是“默认”零还是您自己设置的值。
如果数组中的值不能为零,那么您需要遍历整个长度,检查具有相应非零值的最高索引;像这样的东西:
public int dynamicLength(int[] a) {
int max = -1;
for (i = 0; i < a.length; i++) {
if (a[i] != 0) max = i;
}
return max;
}
即便如此,这可能并不理想,因为数组可以稀疏填充。您想要指定指数的数量,还是指定最高指数的指数?
简短的回答几乎肯定是“使用ArrayList
”。
答案 2 :(得分:1)
如果数组的大小正在改变,您应该使用ArrayList。性能差异很小。
请参阅here for how to use one.请参阅here for the API also.
据我所知,您只需要对已分配的元素进行计数,但在运行时会更安全,并且使用ArrayList会更简单。 ArrayList类只包装一个Java数组并为您处理不断变化的大小。您可以通过调用ArrayList上的size()
方法来获取大小。
如果要迭代元素,请使用for-each循环查看此示例:
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1); //size is 1
list.add(2); //size is 2
list.add(3); //size is 3
list.add(4); //size is 4
for(Integer n : list)
System.out.println(n);
ArrayList使用迭代器,for-each循环使用它迭代ArrayList。让生活变得更加简单。
答案 3 :(得分:1)
当你这样做时
int[] a = new int[11111]
它会创建一个包含11111
元素的数组,因为它是int
,它会将其指定为0
的默认值,因此您可以设置所有值的数组。
您应该转到List
答案 4 :(得分:1)
如上所述,使用List可能是正确的答案。但是,为了解决原始问题,您可以尝试这样做:
Integer[] foo = new Integer[11111];
foo[0] = new Integer(1);
foo[1] = new Integer(2);
foo[2] = new Integer(3);
foo[3] = new Integer(4);
并创建一个计算非空值的方法:
public static int countItems(Integer[] array) {
int count = 0;
for (Integer i : array) {
if (i != null) {
count++;
}
}
return count;
}
当然,这将是一个痛苦的管理,因为您需要取消不再需要的任何项目。它还提出了一个问题,即你是否会在数组中接受“漏洞”,例如非空值中的空值。我上面计算函数的例子会接受这样的漏洞。
所以,是的。使用列表。
答案 5 :(得分:0)
您可以使用for
/ while
循环创建一个计算数组非0元素的方法。