Người ta không thể nói lĩnh vực kích thước là giảm, dạng danh sách như vậy mà không có kích thước đã tồn tại 50 năm kể từ khi LISP mà họ đang có mặt khắp nơi và họ đang rất phổ biến ở ML và Haskell quá, cả hai đều có ảnh hưởng trong scala.
Lý do cơ bản là danh sách đó là cấu trúc đệ quy. Một không trống List
là Cons(head: A, tail: List[A])
- ngoại trừ rằng Cons thực ra được gọi là ::
để cho phép ký hiệu thuận tiện. Bạn có thể truy cập đuôi (danh sách không có phần tử đầu của nó) và đó cũng là một danh sách. Và điều này được thực hiện chỉ là về tất cả các thời gian. Vì vậy, việc đếm số trong danh sách sẽ không có nghĩa là chỉ thêm một số nguyên, nhưng càng nhiều số nguyên càng có nhiều phần tử. Điều này là khả thi, nhưng chắc chắn không miễn phí.
Nếu bạn so sánh với java LinkedList
, LinkedList
có triển khai đệ quy (dựa trên Nút, ít nhiều giống như Nhược điểm, nhưng có liên kết theo cả hai hướng). Nhưng LinkedList không phải là một Node, nó sở hữu chúng (và giữ số lượng của chúng). Vì vậy, trong khi nó có một triển khai đệ quy, bạn không thể xử lý nó một cách đệ quy. Bạn muốn đuôi của một LinkedList như một LinkedList, bạn sẽ phải loại bỏ phần đầu và thay đổi danh sách của bạn hoặc sao chép tất cả các phần tử đuôi vào một LinkedList mới. Vì vậy, scala của List
và java LinkedList
là cấu trúc rất khác nhau.
Nguồn
2011-11-19 22:21:43
Đó là 'size()' trong Java, một hàm. – Kapep
Nhưng chức năng được hỗ trợ bởi một trường, mà làm cho nó O (1). Danh sách Scala không có trường như vậy, vì lý do chính đáng, nhưng điều đó làm cho việc truy cập chiều dài O (n). –
"* python * dude" xuất phát từ nền * Java *? * python * không đề cập đến ngôn ngữ, phải không? – huynhjl