如何在Java中计算数组的元素数量

27

假设我有一个数组

int theArray = new int[20];

数组的长度为20,但计数为0。我该如何获得计数?


3
如果您使用ArrayList,那么您可以获得一个计数。 - Milhous
14个回答

35

"计数"的意思是什么?指具有非零值的元素数量吗?您只需对它们进行计数即可。

这个数组和明确设置为零值的数组之间没有区别。例如,这些数组是无法区分的:

int[] x = { 0, 0, 0 };
int[] y = new int[3];

Java中的数组始终具有固定的大小-通过length字段访问。没有“当前正在使用的数组数量”的概念。


这是问题:我有一个数组的数组,比如 int x[][] = new int[20][3]。使用嵌套的 for 循环,我将最内层数组中的值设置为从 0 到 19 的随机数。到目前为止一切都很好,但我想让 a(其中 a 是索引)成为 x[元素a] 的一个元素。例如:如果 x[a] = {b,c,d},我想要得到 x[b]={a,...}、x[c]={a,...} 和 x[d]={a,...}。但 a 不一定是数组的第一个元素。非常感谢您的帮助。 - El Fuser
@El Fuser:老实说,我完全没听懂你的意思...而且我也不明白它与你最初的问题有什么关系。 - Jon Skeet
抱歉造成困惑,我想表达的是,如果你有 int[] x = new int[3]; x[0]=1;x[1]=0;,我该如何知道 x 只有 2 个元素不是初始化值。 - El Fuser
@El Fuser: 你不能。它们是无法区分的。在这种情况下,所有的元素都是初始化值。 - Jon Skeet
如果您稍后需要计数,则可以选择jjnguy的解决方案。 - HoldOffHunger

22

遍历它并计算其中不为null元素的数量:

int counter = 0;
for (int i = 0; i < theArray.length; i ++)
    if (theArray[i] != null)
        counter ++;

可以使用for:each循环等方式使其更加简洁,但这就是要点。

否则,保持一个计数器,每次添加元素时增加它。


16

我认为你可能需要使用ArrayList<Integer>而不是数组。这将允许你做到以下几点:

ArrayList<Integer> arr = new ArrayList<Integer>(20);
System.out.println(arr.size());
输出将为0
然后,您可以向列表中添加元素,并且它将为您跟踪计数。 (只要需要,它还会增加支持存储的大小。)

6
  1. Your code won't compile, it should be int [] theArray = new int[20];;
  2. You can get the array length as theArray.length;
  3. For primitive types, the array will be initialized with the default values (0 for int).
  4. You can make it Integer [] theArray = new Integer[20]; and then count initialized members as this code does:

    public int count(Object [] array) {
        int c = 0;
        for(Object el: array) { if(el != null) c++; }
            return c;
    }
    
请注意,本答案不涉及为什么您可能需要此功能以及如何实现您想要的最佳方式。

4

Java中没有数组中已使用元素的“计数”概念。

为了解决这个问题,Java使用了一个ArrayList。该List是在数组上实现的,当JVM认为它不够大(或者有时太大)时,该数组会被调整大小。

要获取计数,您可以使用mylist.size()来确保容量(支持底层数组),您可以使用mylist.ensureCapacity(20)。要摆脱额外的容量,您可以使用mylist.trimToSize()


3

这个功能没有内置。这个计数是针对整个用户的。需要维护一个计数器或类似的东西。


0
如果您希望拥有一个数组,但不想分配所有元素,那么您需要通过其他变量进行自己的记录,以确保已经放置了多少个元素。如果您想避免这样做,同时又想获得一个可以在初始实例化后增加容量的“数组”,则可以创建一个ArrayList
ArrayList<Integer> theArray = new ArrayList<Integer>();
theArray.add(5); // places at index 0
theArray.size(); // returns length of 1
int answer = theArray.get(0); // index 0 = 5

不要忘记在文件顶部导入它:
import java.util.ArrayList;

0
如果您假设数组中的0不是有效项,则以下代码应该可以工作:
   public static void main( String[] args )
   {
      int[] theArray = new int[20];
      theArray[0] = 1;
      theArray[1] = 2;

      System.out.println(count(theArray));
   }

   private static int count(int[] array) 
   {
      int count = 0;
      for(int i : array)
      {
         if(i > 0)
         {
            count++;
         }
      }
      return count;
   }

0

你可以声明一个与你的数组长度相同的布尔数组:

true:已使用
false:未使用

然后将相同单元格编号的值更改为true。接下来,你可以使用for循环计算有多少单元格已被使用。


0

在定义数组时,您正在设置一块内存来容纳您想要放入数组中的所有项目。

这将具有默认值,取决于数组成员类型的类型。

您无法找出已填充的项目数量,除非在自己的代码中进行跟踪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接