java数组的确切长度

时间:2011-07-20 09:28:07

标签: java

我设置了一个如下所示的整数数组

int[] a = new int[11111];
 //if I set
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;

我想要一个让它给我的方法 4但是11111。 有什么方法可以用吗?

6 个答案:

答案 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元素的方法。