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
Trả lời
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.
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
'[cần dẫn nguồn]' – delnan
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.) –
Đó 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().
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
- 1. Mảng JSON có độ dài
- 2. Độ dài mảng với con trỏ
- 3. Mảng có độ dài bằng không
- 4. Mảng SIMD thêm cho độ dài mảng tùy ý
- 5. Độ dài mảng trong lợi nhuận angularjs undefined
- 6. Độ dài biến đổi
- 7. Thông báo tùy chỉnh: java.lang.RuntimeException: độ dài mảng xấu
- 8. Lặp lại qua mảng Java có độ dài biến đổi
- 9. Lặp lại mảng với một độ dài nhất định?
- 10. Cách lấy độ dài mảng con trỏ C?
- 11. Cách tìm độ dài của danh sách mảng?
- 12. Chuỗi dài nhất trong mảng object_ gumpy
- 13. Mảng Chiều dài trong Java
- 14. Lấy chiều dài mảng của một mảng 2D trong Java
- 15. độ dài nguyên trong javascript
- 16. Chuyển đổi ArrayList vào mảng 2D chứa độ dài khác nhau của các mảng
- 17. Độ dài byte tối đa []?
- 18. Automapper đặt thuộc tính mảng thành mảng không độ dài thay vì null
- 19. Cách ghi đè hàm.length để trả về độ dài của mảng, ở chế độ nghiêm ngặt
- 20. Sự khác nhau giữa độ dài và độ dài() là gì?
- 21. tìm chiều dài chuỗi các giá trị giống hệt nhau trong một mảng (mã hóa độ dài chạy)
- 22. Nhận chiều dài của mảng chuỗi không rõ chiều dài
- 23. Chiều dài mảng của mảng Array.pop() không?
- 24. Kích thước mảng (Chiều dài) trong C#
- 25. Viết chuỗi vào mảng byte có độ dài cố định trong C#
- 26. Có cách nào tạo một mảng với độ dài biến đổi trong c?
- 27. Cách tốt nhất để tính độ dài mảng tuyệt đối trong JavaScript là gì?
- 28. Làm cách nào để tìm độ dài của mảng kết hợp trong ActionScript 3.0?
- 29. Làm thế nào tôi có thể nhận được độ dài của một mảng trong awk?
- 30. Tôi có thể giới hạn độ dài của một mảng trong JavaScript không?
liên quan: http://stackoverflow.com/q/9297899/697449 –
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ể.) –
Bên cạnh đó, đó là (IMO) và ** câu hỏi thú vị ** và đáng trả lời. –