2012-03-04 41 views
5

Chỉ là một câu hỏi đơn giản, nhưng tại sao là length trong một mảng không được đóng gói? Đây có phải là chỉ cho người mới bắt đầu trong lập trình bởi vì tôi cảm thấy như một phương pháp getLength() sẽ dễ dàng thực hiện.Độ dài trong mảng

+0

liên quan: http://stackoverflow.com/q/9297899/697449 –

+1

Bỏ phiếu để mở lại. IMO, đây KHÔNG phải là bản sao của câu hỏi được liên kết. Câu hỏi này là lý do tại sao các nhà thiết kế Java không ** đóng gói ** trường 'length'. (Câu hỏi được liên kết là về tính nhất quán API của mảng so với chuỗi ... đây là vấn đề khác biệt đáng kể.) –

+2

Bên cạnh đó, đó là (IMO) và ** câu hỏi thú vị ** và đáng trả lời. –

Trả lời

1

Tôi đã giả định nhưng tôi không thể nói rằng đây là lý do tại sao các nhà thiết kế của java đã làm theo cách đó.

Mảng là vùng chứa (và đối tượng dĩ nhiên) có độ dài cố định. Và nó rất cơ bản, vì vậy đóng gói trong trường hợp này sẽ tốt đẹp nhưng không quan trọng. Hãy xem ArrayList chẳng hạn, có thể được xem như là một đóng gói của một mảng.

Mảng cơ bản có nhiều lợi ích so với các loại khác đóng gói nó. Và vì vậy có lẽ khi phiên bản Java đầu tiên xuất hiện, nó thiếu phần lớn tối ưu hóa mà nó có ngày hôm nay. Vì vậy, có một cấu trúc dữ liệu với sự đơn giản (về hiệu suất) của một mảng là một điều tốt.

Ngoài ra nó có thể đơn giản như họ không nghĩ về điều đó tại thời điểm đó và sau đó họ phải duy trì một khả năng tương thích ngược :)

Dù sao, nếu bạn tìm thấy những thứ thú vị về điều đó (có thể là bạn có thể gửi email cho mặt trời/oracle) xin vui lòng gửi! Đó là một câu hỏi hay.

0

Mặc dù mảng có thể được hiểu là đối tượng, chúng thực sự chỉ là một tập hợp các địa chỉ bộ nhớ cố định chứa một số đối tượng hoặc biến khác. Theo cách này, họ có các thuộc tính, chẳng hạn như .length, nhưng không nhất thiết phương pháp, như .getLength()

Rất nhiều thông tin về các mảng có thể được tìm thấy ở đây: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+1

'[cần dẫn nguồn]' – delnan

+1

Giải thích này không giữ nước. Trong thực tế, các mảng có 'Object' là superclass ngầm của chúng, và do đó DO có một loạt các phương thức. Sau đó, các nhà thiết kế Java * có thể * đã định nghĩa một phương thức 'length()' cho tất cả các mảng. (Thực tế là một chương trình ứng dụng không thể thêm các phương thức không liên quan ở đây.) –

0

Đó sẽ là dễ thực hiện, và đó là lý do tại sao nó không được triển khai.

Mảng đơn giản là các khối lưu trữ, không có kiểm soát thực. Chúng cho phép một phương pháp lưu trữ dễ dàng và nhanh chóng khi không cần điều khiển nâng cao.

Bạn có thể sử dụng những thứ như danh sách, hàng đợi, danh sách được liên kết, danh sách được liên kết kép, v.v ... có thể lưu bản ghi kích thước của chúng nếu cần. Rõ ràng, tùy thuộc vào ngôn ngữ bạn đang sử dụng, bạn cũng có thể phải tự mình tạo.

Nếu bạn muốn có độ dài mảng và vẫn sử dụng mảng đơn giản, bạn có thể thêm 1 vào biến số mỗi khi bạn thêm thứ gì đó vào và trừ đi mỗi lần bạn xóa thứ gì đó. Điều này sẽ thực hiện chức năng tương tự như phương thức getLength().

+3

Cái gì? Độ dài * được lưu trữ, nó đơn giản là không được tiếp xúc thông qua một phương thức getter nhưng thông qua một thành viên công cộng. – delnan

Các vấn đề liên quan