Sự khác biệt giữa Bộ sưu tập và Danh sách trong Java là gì?


153

Sự khác biệt giữa CollectionListtrong Java là gì? Khi nào nên sử dụng?


Danh sách giao diện công cộng mở rộng Bộ sưu tập {}
rai.skumar

Câu trả lời:


263

Trước hết: a Listlà a Collection. Nó là một chuyên ngành Collection, tuy nhiên.

A Collectionchỉ là: một bộ sưu tập các mặt hàng. Bạn có thể thêm nội dung, xóa nội dung, lặp lại nội dung và truy vấn có bao nhiêu nội dung trong đó.

A Listthêm thông tin về một chuỗi các công cụ được xác định vào đó: Bạn có thể lấy phần tử ở vị trí n , bạn có thể thêm phần tử ở vị trí n , bạn có thể xóa phần tử ở vị trí n .

Trong trường hợp Collectionbạn không thể làm điều đó: "phần tử thứ 5 trong bộ sưu tập này" không được xác định, vì không có thứ tự xác định.

Ngoài ra còn có các Bộ sưu tập chuyên biệt khác, ví dụ như Setcó thêm tính năng rằng nó sẽ không bao giờ chứa cùng một yếu tố hai lần.


9
vâng, danh sách là một chuyên ngành của bộ sưu tập (nhưng không được sắp xếp) +1
atamanroman

2
Danh sách trong java mở rộng giao diện Bộ sưu tập và xây dựng các chức năng được lập chỉ mục giúp thực hiện hành vi truy xuất và loại bỏ dựa trên vị trí
ma

188

Collectionlà giao diện gốc cho hệ thống phân cấp Bộ sưu tập java. Listlà một giao diện phụ xác định Bộ sưu tập theo thứ tự, các giao diện phụ khác Queuethường sẽ lưu trữ các phần tử sẵn sàng để xử lý (ví dụ: ngăn xếp ).

Sơ đồ sau biểu thị mối quan hệ giữa các loại bộ sưu tập java khác nhau:

bộ sưu tập java


1
Thực sự thích hình ảnh của bạn, tôi đã nhìn thấy nó khi chuẩn bị cho SCJP nhưng gần như quên tất cả những thứ đó vào những ngày này.
Trương Hà

1
Tôi phải thừa nhận rằng hình ảnh này đã bị đánh cắp từ blog này . Lần đầu tiên tôi cũng thấy một sơ đồ như thế này trong cuốn sách K & B SCJP .
krock

bạn có thể học được rất nhiều từ chứng chỉ scjp, hầu hết các cuốn sách cho chủ đề này đều tuyệt vời :)
atamanroman

Tôi đoán Mapkhông phải là một Collection.
gianni christofakis

7

API Java là tốt nhất để trả lời điều này

Bộ sưu tập

Giao diện gốc trong hệ thống phân cấp bộ sưu tập. Một bộ sưu tập đại diện cho một nhóm các đối tượng, được gọi là các yếu tố của nó. Một số bộ sưu tập cho phép các yếu tố trùng lặp và những người khác thì không. Một số được ra lệnh và những người khác không có thứ tự. JDK không cung cấp bất kỳ triển khai trực tiếp nào của giao diện này: nó cung cấp các triển khai của các giao diện con cụ thể hơn như Set và List. Giao diện này thường được sử dụng để vượt qua các bộ sưu tập xung quanh và thao tác chúng ở nơi mong muốn tổng quát tối đa.

Danh sách (mở rộng Bộ sưu tập)

Một bộ sưu tập theo thứ tự (còn được gọi là một chuỗi). Người dùng giao diện này có quyền kiểm soát chính xác vị trí trong danh sách mỗi phần tử được chèn vào. Người dùng có thể truy cập các phần tử theo chỉ số nguyên (vị trí trong danh sách) và tìm kiếm các phần tử trong danh sách.

Không giống như các bộ, danh sách thường cho phép các yếu tố trùng lặp. Chính thức hơn, các danh sách thường cho phép các cặp phần tử e1 và e2 sao cho e1.equals (e2) và chúng thường cho phép nhiều phần tử null nếu chúng cho phép các phần tử null. Không thể tưởng tượng rằng ai đó có thể muốn thực hiện một danh sách cấm trùng lặp, bằng cách ném ngoại lệ thời gian chạy khi người dùng cố gắng chèn chúng, nhưng chúng tôi hy vọng việc sử dụng này là hiếm.


3

List và Set là hai lớp con của Collection.

Trong Danh sách, dữ liệu theo thứ tự cụ thể.

Trong Set, nó không thể chứa cùng một dữ liệu hai lần.

Trong Bộ sưu tập, nó chỉ lưu trữ dữ liệu không có thứ tự cụ thể và có thể chứa dữ liệu trùng lặp.


2

Bộ sưu tập là một giao diện cấp cao mô tả các đối tượng Java có thể chứa các bộ sưu tập của các đối tượng khác. Nó không cụ thể lắm về cách chúng được truy cập, liệu nhiều bản sao của cùng một đối tượng có thể tồn tại trong cùng một bộ sưu tập hay không, hay thứ tự là quan trọng. Danh sách là đặc biệt một lệnh bộ sưu tập của các đối tượng. Nếu bạn đặt các đối tượng vào một Danh sách theo một thứ tự cụ thể, chúng sẽ ở theo thứ tự đó.

Và việc quyết định nơi sử dụng hai giao diện này ít quan trọng hơn nhiều so với việc quyết định việc triển khai cụ thể mà bạn sử dụng là gì. Điều này sẽ có ý nghĩa đối với hiệu suất thời gian và không gian của chương trình của bạn. Ví dụ: nếu bạn muốn có một danh sách, bạn có thể sử dụng ArrayList hoặc LinkedList, mỗi danh sách sẽ có ý nghĩa đối với ứng dụng. Đối với các loại bộ sưu tập khác (ví dụ: Bộ), các cân nhắc tương tự sẽ được áp dụng.


2

Bộ sưu tập là giao diện Siêu của Danh sách, vì vậy mọi danh sách Java cũng là một thể hiện của bộ sưu tập. Các bộ sưu tập chỉ được lặp lại liên tục (và không theo thứ tự cụ thể nào) trong khi Danh sách cho phép truy cập vào một phần tử tại một vị trí nhất định thông qua get(int index)phương thức.


2

Bộ sưu tập là giao diện chính của phân cấp và Bộ sưu tập Java (Trình tự) là một trong những giao diện phụ xác định một bộ sưu tập theo thứ tự.

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.