2013-02-15 50 views
109

Tôi đã sử dụng ArrayList gần đây trong dự án Android của tôi tại văn phòng và tôi hơi bối rối giữa Danh sách và ArrayList, sự khác biệt giữa hai và tôi nên sử dụng cái gì?Sự khác nhau giữa Danh sách và ArrayList là gì?

Ngoài ra tôi đã thấy một số triển khai của nó như thế nào.

List<SomeObject> myList = new ArrayList<SomeObject>(); 

ArrayList<SomeObject> myList = new ArrayList<SomeObject>(); 

Sự khác biệt của hai trường hợp đó là gì?

+6

Bản sao có thể có của [Danh sách loại so với loại ArrayList trong Java] (http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java), [Danh sách Java vs ArrayList] (http://stackoverflow.com/questions/9309093/java-list-vs-arraylist) và [List vs ArrayList] (http://stackoverflow.com/questions/7726361/list-vs-arraylist); Ngoài ra, [Danh sách Vs. ArrayList] (http://www.coderanch.com/t/379305/java/java/List-ArrayList) và [nhiều hơn] (https://www.google.com/search?hl=vi&q=java+ list + vs + arraylist)! – Eric

+3

http://stackoverflow.com/questions/6867484/what-is-a-list-vs-an-arraylist?rq=1 –

+3

Một là một giao diện và lớp kia là một lớp. Bây giờ bạn có thể tự mình tìm ra nó. –

Trả lời

130

Không có sự khác biệt giữa việc triển khai danh sách trong cả hai ví dụ của bạn. Tuy nhiên, có một sự khác biệt trong cách bạn có thể sử dụng thêm myList biến trong mã của mình.

Khi bạn xác định danh sách của bạn như:

List myList = new ArrayList(); 

bạn chỉ có thể gọi các phương thức và các thành viên tham khảo được định nghĩa trong giao diện danh sách. Nếu bạn định nghĩa nó như:

ArrayList myList = new ArrayList(); 

bạn sẽ có thể gọi các phương pháp ArrayList cụ thể và sử dụng các thành viên ArrayList cụ thể ngoài những người có định nghĩa được thừa kế từ danh sách. Tuy nhiên, khi bạn gọi một phương thức của một giao diện List trong ví dụ đầu tiên, được thực hiện trong ArrayList, phương thức từ ArrayList sẽ được gọi (vì giao diện List không thực hiện bất kỳ phương thức nào).

Đó được gọi là đa hình. Bạn có thể đọc nó.

+166

Danh sách không phải là một lớp, nó là một giao diện. Nó không có bất kỳ phương pháp nào được triển khai. Vì vậy, nếu bạn gọi một phương thức trên một tham chiếu List, bạn thực tế gọi phương thức của ArrayList trong cả hai trường hợp. – robonerd

+3

Có sự khác biệt, như @robonerd đã giải thích ở trên. Danh sách là một Giao diện, bạn có thể nhập các biến không chỉ với các lớp hoặc các kiểu nguyên thủy, mà còn với Giao diện. – emaringolo

+4

Các bạn, hãy đọc kỹ bài đăng của tôi. Không trộn lẫn định nghĩa với triển khai. Trong cả hai trường hợp, việc triển khai thực hiện giống nhau: ArrayList. Biến được định nghĩa khác nhau. Không chắc chắn những gì bạn đang cố gắng thay đổi trong câu trả lời của tôi. – ATrubka

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