HOWTO · Java

Java 中 size 和 length 的區別

這篇文章教你如何知道 Java 中大小和長度之間的區別。

本教程介紹了 Java 中大小和長度之間的區別。我們還列出了一些示例程式碼以幫助你理解該主題。

Java 有一個 size() 方法和一個 length 屬性。初學者可能認為它們是可以互換的並執行相同的任務,因為它們聽起來有些相同。在 Java 中,大小和長度是兩個不同的東西。在這裡,我們將瞭解兩者之間的差異。

Java 中陣列的 length 屬性

陣列以有序的方式儲存固定數量的相同型別的資料。Java 中的所有陣列都有一個長度欄位,用於儲存為該陣列的元素分配的空間。它是一個常數值,用於找出陣列的最大容量。

  • 請記住,該欄位不會為我們提供陣列中存在的元素數,而是可以儲存的最大元素數(無論元素是否存在)。

Java 陣列中 .length 的示例

在下面的程式碼中,我們首先初始化一個長度為 7 的陣列。即使我們沒有新增任何元素,該陣列的長度欄位仍顯示 7。這個 7 只是表示最大容量。

public class Main {
  public static void main(String[] args) {
    int[] intArr = new int[7];
    System.out.print("Length of the Array is: " + intArr.length);
  }
}

輸出:

Length of the Array is: 7

現在,讓我們使用它們的索引將 3 個元素新增到陣列中,然後列印長度欄位。還是顯示 7。

public class Main {
  public static void main(String[] args) {
    int[] intArr = new int[7];
    intArr[0] = 20;
    intArr[1] = 25;
    intArr[2] = 30;
    System.out.print("Length of the Array is: " + intArr.length);
  }
}

輸出:

Length of the Array is: 7

長度欄位是常量,因為陣列的大小是固定的。我們必須定義在初始化期間我們將儲存在陣列中的最大元素數(陣列的容量),我們不能超過這個限制。

Java 陣列中 size() 方法的示例

陣列沒有 size() 方法;它會返回一個編譯錯誤。請參考下面的示例。

public class SimpleTesting {
  public static void main(String[] args) {
    int[] intArr = new int[7];
    System.out.print("Length of the Array is: " + intArr.size());
  }
}

輸出:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot invoke size() on the array type int[]

	at SimpleTesting.main(SimpleTesting.java:7)

使用 Java 中的 length() 方法查詢長度

Java 字串只是字元的有序集合,與陣列不同,它們具有 length() 方法而不是 length 欄位。此方法返回字串中存在的字元數。

請參考下面的示例。

public class Main {
  public static void main(String[] args) {
    String str1 = "This is a string";
    String str2 = "Another String";
    System.out.println("The String is: " + str1);
    System.out.println("The length of the string is: " + str1.length());
    System.out.println("\nThe String is: " + str2);
    System.out.println("The length of the string is: " + str2.length());
  }
}

輸出:

The String is: This is a string
The length of the string is: 16

The String is: Another String
The length of the string is: 14

請注意,我們不能在字串上使用 length 屬性,並且 length() 方法不適用於陣列。下面的程式碼顯示了我們濫用它們時的錯誤。

public class SimpleTesting {
  public static void main(String[] args) {
    String str1 = "This is a string";
    System.out.println("The length of the string is: " + str1.length);
  }
}

輸出:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	length cannot be resolved or is not a field

	at SimpleTesting.main(SimpleTesting.java:7)

同樣,我們不能在陣列上使用字串 length() 方法。

public class SimpleTesting {
  public static void main(String[] args) {
    int[] intArray = {1, 2, 3};
    System.out.println("The length of the string is: " + intArray.length());
  }
}

輸出:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot invoke length() on the array type int[]

	at SimpleTesting.main(SimpleTesting.java:7)

Java Collections size() 方法

size()java.util.Collections 類的一個方法。Collections 類被許多不同的集合(或資料結構)使用,例如 ArrayListLinkedListHashSetHashMap

size() 方法返回集合中當前存在的元素數。與陣列的 length 屬性不同,size() 方法返回的值不是常數,而是根據元素的數量而變化。

Java 中 Collection Framework 的所有集合都是動態分配的,因此元素的數量可能會有所不同。size() 方法用於跟蹤元素的數量。

在下面的程式碼中,很明顯,當我們建立一個沒有任何元素的新 ArrayList 時,size() 方法返回 0。

import java.util.ArrayList;
import java.util.List;
public class Main {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    System.out.println("The ArrayList is: " + list);
    System.out.println("The size of the ArrayList is: " + list.size());
  }
}

輸出:

The ArrayList is: []
The size of the ArrayList is: 0

但是這個值會隨著我們新增或刪除元素而改變。新增三個元素後,大小增加到 3。接下來,我們刪除了兩個元素,列表的大小變為 1。

import java.util.ArrayList;
import java.util.List;
public class Main {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    System.out.println("The ArrayList is: " + list);
    System.out.println("The size of the ArrayList is: " + list.size());
    list.add(20);
    list.add(40);
    list.add(60);
    System.out.println("\nAfter adding three new elements:");
    System.out.println("The ArrayList is: " + list);
    System.out.println("The size of the ArrayList is: " + list.size());
    list.remove(0);
    list.remove(1);
    System.out.println("\nAfter removing two elements:");
    System.out.println("The ArrayList is: " + list);
    System.out.println("The size of the ArrayList is: " + list.size());
  }
}

輸出:

The ArrayList is: []
The size of the ArrayList is: 0

After adding three new elements:
The ArrayList is: [20, 40, 60]
The size of the ArrayList is: 3

After removing two elements:
The ArrayList is: [40]
The size of the ArrayList is: 1

Java 中大小和長度的區別

儘管 size 和 length 有時可以在同一上下文中使用,但它們在 Java 中具有完全不同的含義。

陣列的 length 欄位用於表示陣列的最大容量。最大容量是指可以儲存在其中的最大元素數。此欄位不考慮陣列中存在的元素數量並保持不變。

字串的 length() 方法用於表示字串中出現的字元數。Collections Frameworksize() 方法用於檢視該集合中當前存在的元素數量。Collections 具有動態大小,因此 size() 的返回值可能會有所不同。