Phân biệt length và length() trong Java

Trong Java, lengthlength() đều dùng để lấy kích thước, nhưng chúng thuộc về hai khái niệm khác nhau: length là thuộc tính của mảng, còn length() là phương thức của lớp String.

Ví dụ cơ bản

int[] scores = new int[5];
System.out.println(scores.length);      // thuộc tính, không có dấu ngoặc

String name = "example";
System.out.println(name.length());      // phương thức, có dấu ngoặc

Ví dụ thuật toán

Bài toán 1: Đếm số cặp chỉ số (i, j) thỏa mãn i < j và giá trị bằng nhau trong mảng.

class Solution {
    public int countGoodPairs(int[] values) {
        int total = 0;
        int size = values.length;
        for (int first = 0; first < size; first++) {
            for (int second = first + 1; second < size; second++) {
                if (values[first] == values[second]) {
                    total++;
                }
            }
        }
        return total;
    }
}

Bài toán 2: Kiểm tra xem chuỗi combined có phải là kết quả xen kẽ của firstsecond không.

class Solution {
    public boolean checkInterleave(String first, String second, String combined) {
        int len1 = first.length();
        int len2 = second.length();
        int len3 = combined.length();

        if (len1 + len2 != len3) {
            return false;
        }

        boolean[][] dp = new boolean[len1 + 1][len2 + 1];
        dp[0][0] = true;

        for (int row = 0; row <= len1; row++) {
            for (int col = 0; col <= len2; col++) {
                int pos = row + col - 1;
                if (row > 0) {
                    dp[row][col] = dp[row][col] || (dp[row - 1][col] && first.charAt(row - 1) == combined.charAt(pos));
                }
                if (col > 0) {
                    dp[row][col] = dp[row][col] || (dp[row][col - 1] && second.charAt(col - 1) == combined.charAt(pos));
                }
            }
        }

        return dp[len1][len2];
    }
}

Tại sao mảng dùng length?

Mảng là đối tượng chứa tập hợp các phần tử cùng kiểu với kích thước c định. Sau khi khởi tạo, số lượng phần tử không thay đổi, do đó kích thước được coi là một thuộc tính bản chất của mảng và được lưu trữ trong trường length.

Có hai cách tạo mảng:

int[] data = new int[10];
int[][] matrix = new int[3][];
int[] sample = {1, 2, 3};

Java không cung cấp định nghĩa lớp Array.java như String.java mà mảng được xử lý bởi JVM. Kiểu lớp của mảng tại thời điểm chạy có thể được kiểm chứng:

int[] arr = new int[3];
System.out.println(arr.getClass());  // class [I

Ký hiệu [I biểu thị lớp đại diện cho mảng có thành phần kiểu int.

Tại sao String dùng length()?

String là một lớp đối tượng trong Java. Khác với mảng, độ dài của chuỗi ch là một thông tin cần truy vấn chứ không phải trạng thái cố định cần tiếp xúc trực tiếp. Do đó, lớp String cung cấp phương thức length() để lấy giá trị này.

String message = "hello";
System.out.println(message.length());

Như vậy, quy tắc đơn giản là: mảng dùng length, chuỗi dùng length().

Thẻ: Java array string Dynamic Programming

Đăng vào ngày 23 tháng 8 lúc 06:46