Java 中 size 和 length 的區別

Mohammad Irfan 2023年1月30日 2021年10月2日
  1. Java 中陣列的 length 屬性
  2. Java 陣列中 .length 的示例
  3. Java 陣列中 size() 方法的示例
  4. 使用 Java 中的 length() 方法查詢長度
  5. Java Collections size() 方法
  6. Java 中大小和長度的區別
Java 中 size 和 length 的區別

本教程介紹了 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() 的返回值可能會有所不同。