Mảng chuỗi Java: có kích thước của phương thức không?


152

Tôi đến từ một nền tảng php và trong php, có một array_size()hàm cho bạn biết có bao nhiêu phần tử trong mảng được sử dụng.

Có một phương pháp tương tự cho một String[]mảng? Cảm ơn.


3
Heh, tất cả các câu trả lời là trong cùng một phút.
jjnguy

1
Ah, PHP với không gian tên toàn cầu lộn xộn của nó. Những ngày xưa tốt đẹp ...
kevinji

2
tôi nghĩ rằng anh ta có nghĩa là số của php () không phải mảng_size ()
Joshua Burns

Câu trả lời:


277

Có, .length(giống như thuộc tính, không phải là một phương thức):

String[] array = new String[10];
int size = array.length;

2
xin chào, làm thế nào chúng ta có thể tìm thấy các tài liệu liệt kê tất cả các thuộc tính và chức năng có thể có của đối tượng mảng? Tôi không có nghĩa là đối tượng Mảng là tài liệu duy nhất mà tôi có thể tìm thấy.
GMsoF

1
@GMsoF Tài liệu cho "[]" (mảng, không phải đối tượng Mảng) thực sự là đặc tả Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Chỉnh sửa: Ah ... nhận xét là từ năm 2013 ...
Acapulco

44
array.length

Nó thực sự là một thành viên cuối cùng của mảng, không phải là một phương thức.


2
IIRC, nó không thực sự là một lĩnh vực, nó trông giống như một lĩnh vực.
Tom Hawtin - tackline

Ồ, vậy thì sao? Một số mảng đặc biệt?
jjnguy

3
một "trường giả" được biên dịch thành mã op có độ dài mảng đặc biệt, thay vì mã op truy cập trường.
Pete Kirkham

2
Đó là một trường, tích lũy theo §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "Độ dài trường cuối cùng công khai, chứa số lượng thành phần của mảng ( chiều dài có thể dương hoặc bằng 0). "
Michael Myers

19

Ngoài ra, có thể hữu ích khi lưu ý rằng nếu bạn có Mảng nhiều chiều, bạn có thể nhận được kích thước tương ứng chỉ bằng cách thêm '[0]' vào mảng bạn đang truy vấn cho đến khi bạn đến trục / tuple / chiều thích hợp.

Điều này có lẽ được giải thích tốt hơn với mã sau đây:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

Mà tạo ra đầu ra:

5
12

15

tài sản cuối cùng của mảng.length

nó là tài sản công cộng và cuối cùng. Nó là cuối cùng vì các mảng trong Java là bất biến theo kích thước (nhưng có thể thay đổi theo giá trị của phần tử)


14

Mảng là các đối tượng và chúng có trường độ dài.

Chuỗi [] haha ​​= {"olle", "bulle"};

haha.length sẽ là 2


Chỉ cần đến nitpick. Nhưng tôi tin rằng mảng KHÔNG phải là đối tượng trong Java - chúng là một trong hai loại biến tham chiếu. Các đối tượng khác.
jabbie

2
@jabbie: Thật sao? Bạn có một tài liệu tham khảo cho điều đó? Tôi chỉ đặt câu hỏi vì bạn có thể nói Object o = new String [] {"hello"};
Simon Nickerson

simon tôi nghĩ rằng lý do mà câu lệnh hoạt động là vì họ đã giới thiệu các lớp phản xạ cho tất cả các kiểu nguyên thủy.
Brian Sweeney

9
Đọc câu đầu tiên của docs.oracle.com/javase/specs/jls/se8/html/jls-10.html và sau đó thử cho chúng tôi biết rằng mảng không phải là đối tượng. ;)
Michael Myers

1
bạn có thể đã sử dụng một số tên biến khác, nó gây mất tập trung cho tôi
Space Rocker

11

Trong java có một lengthtrường mà bạn có thể sử dụng trên bất kỳ mảng nào để tìm ra kích thước của nó:

    String[] s = new String[10];
    System.out.println(s.length);

1
cảm ơn bạn đã không hiểu kỹ về những gì nó có thể hoặc không thể, và chỉ đơn giản là cung cấp một câu trả lời ngắn gọn và súc tích. +1 cho bạn. :)
Joshua Burns

9

Nếu bạn muốn một chức năng để làm điều này

Object array = new String[10];
int size = Array.getlength(array);

Điều này có thể hữu ích nếu bạn không biết loại mảng nào bạn có, ví dụ int [], byte [] hoặc Object [].


6

Có một sự khác biệt giữa chiều dài Stringarrayđể làm rõ:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string

Điều này nên được cập nhật trong câu hỏi nếu nó được làm rõ.
Whitecat

5

Câu trả lời là "Tất cả chúng". Một mảng java được phân bổ với một số lượng phần tử cố định. Thuộc tính "length" sẽ cho bạn biết có bao nhiêu. Con số đó là bất biến cho cuộc sống của mảng. Để tương đương có thể thay đổi kích thước, bạn cần một trong các lớp java.util.List - nơi bạn có thể sử dụng phương thức size () để tìm hiểu có bao nhiêu phần tử đang được sử dụng.

Tuy nhiên, có "Đang sử dụng" và sau đó có Đang sử dụng . Trong một mảng đối tượng lớp, bạn có thể có các vị trí phần tử có các phần tử là các đối tượng null, vì vậy mặc dù chúng được tính trong thuộc tính độ dài, nhưng hầu hết các định nghĩa của mọi người, chúng không được sử dụng (YMMV, tùy thuộc vào ứng dụng). Không có hàm dựng sẵn để trả về số lượng null / không null.

Danh sách các đối tượng có một định nghĩa khác về "Đang sử dụng". Để tránh việc tạo / phá hủy quá mức các cấu trúc lưu trữ bên dưới, thường có một số phần đệm trong các lớp này. Nó được sử dụng nội bộ, nhưng không được tính trong phương thức size () được trả về. Và nếu bạn cố gắng truy cập các mục đó mà không mở rộng Danh sách (thông qua các phương thức thêm), bạn sẽ nhận được một ngoại lệ chỉ mục bất hợp pháp.

Vì vậy, đối với Danh sách, bạn có thể có "Đang sử dụng" cho các phần tử không có giá trị, được cam kết, Tất cả các phần tử đã cam kết (bao gồm các phần tử null) hoặc Tất cả các phần tử, bao gồm cả không gian mở rộng hiện được phân bổ.


2

Tất cả các câu trả lời trên là đúng. Điều quan trọng cần quan sát là mảng có thuộc tính length nhưng không phải phương thức length. Bất cứ khi nào bạn sử dụng chuỗi và mảng trong java, ba mô hình cơ bản bạn có thể phải đối mặt là:

  1. Chuỗi s = Chuỗi mới ("vidyasagar");
    System.out.println (s.length ()); // Trong trường hợp này, chúng tôi chỉ sử dụng String. Không có thuộc tính độ dài cho Chuỗi. chúng ta phải sử dụng phương thức length ().
  2. int [] s = new int [10]; System.out.println (s.length); // ở đây chúng tôi sử dụng thuộc tính chiều dài của mảng.
  3. Chuỗi [] s = Chuỗi mới [10];
    System.out.println (s.length); // Ở đây mặc dù kiểu dữ liệu là Chuỗi, nhưng nó không phải là một Chuỗi. s là một tham chiếu cho mảng của Chuỗi. Vì vậy, chúng tôi sử dụng thuộc tính độ dài của mảng để thể hiện có bao nhiêu chuỗi có thể phù hợp với mảng đó.

1

Không thực sự là câu trả lời cho câu hỏi của bạn, nhưng nếu bạn muốn có một cái gì đó giống như một mảng có thể phát triển và thu hẹp, bạn không nên sử dụng một mảng trong java. Bạn có thể là tốt nhất bằng cách sử dụng ArrayList hoặc thực hiện Danh sách khác.

Sau đó, bạn có thể gọi kích thước () trên đó để có kích thước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.