01/10/2018, 00:28

Thắc mắc cách khai báo biến trong java collection

Mình thấy một số coder sử dụng 2 cách sau để khai báo 1 collection.
c1: List arrayList = new ArrayList<>();
c2: ArrayList arrayList = new ArrayList<>();
Theo lời khuyên của 1 coder là dùng cách c1 thì mới đúng bản chất nhưng chưa kịp hỏi rõ lý do.
Hai cách này có gì khác biệt nhau không. Mong nhận được giải đáp từ mọi người.

Quân viết 02:40 ngày 01/10/2018

Nếu quan tâm tới tốc độ thì cách 2 sẽ được complier tối ưu hộ bạn vì nó sẽ sử dụng static invoke vốn nhanh hơn so với dynamic invoke, còn cách 1 sẽ giúp chương trình uyển chuyển hơn

Hidan viết 02:41 ngày 01/10/2018

Không so sánh được vì 2 cái này khác nhau, List là một interface, và ArrayList có thể xem là một implement của List.

Nếu dùng List (List a = new ArrayList(); ) sẽ có ưu điểm là bạn có thể chuyển đổi ArrayList sang Vector, LinkedList dễ dàng thông qua các method có trong List interface, còn nếu dùng kiểu: ArrayList a = new ArrayList(); thì bạn sẽ khó làm được điều này, bạn sẽ chỉ dùng được những method trong ArrayList.

Tóm lại là xem kỹ về interface trong OOP để hiểu phần này dễ dàng hơn.

AZH1d.jpg1000x778 76.3 KB

Chào mọi ng ! Mình có đọc qua các cách giải thích từ trang nước ngoài nhưng vẫn chưa hiểu, và đã có thành viên hỏi về chủ đề tương tự nhưng mình thấy vẫn chưa đủ. Cái nào nhanh hơn? Hay sử dụng như thế nào để tối ưu nhất giữa ArrayList và List?? Cám ơn mọi ng

mình cũng ko chắc phần này và sau khi tra google thì thấy bạn này giải thích khá dễ hiểu, nên share lại

Pete Houston viết 02:29 ngày 01/10/2018

c1: List arrayList = new ArrayList<>();
c2: ArrayList arrayList = new ArrayList<>();

List : là một interface.
ArrayList: là một subclass của List.

Đây là khả năng trừu tượng hoá, một trong 4 đặc tính cơ bản của lập trình OOP.

Không quan tâm là list gì, list được code triển khải thế nào, chỉ quan tâm nó có khả năng làm được việc gì, ví dụ: thêm phần tử, xoá phần tử, truy xuất phần tử …

Nếu quan tâm học chuẩn và bài bản về OOP, bạn có thể đăng kí khoá học này: https://kodemate.com/series/phat-trien-tu-duy-lap-trinh-huong-doi-tuong-voi-java

hong duc viết 02:37 ngày 01/10/2018

Cái ý ở đây là khi mà bạn xài cách 1 thì bạn có được tự do đổi sang các lớp implement list khác khi cần
Còn cách 2 thì bạn chỉ có xài ArrayList hoài thui

traiotdo viết 02:36 ngày 01/10/2018

Cái này hồi trước mình có học…nó là một nguyên tắc của OOP, nguyên tắc này nói về việc dùng interface để che giấu thông tin và còn dùng trong các thiết kế design pattern.

Lợi ích chính là dễ cho việc thay đổi, trong ví dụ của bạn là dùng List list = new ArrayList<>(); sau này muốn dùng cái khác ví dụ list = new LinkedList<>(); hoặc list = new TreeList<>() thì dùng interface mới làm được còn cách 2 là lỗi…

Nó còn 5, 6 cái lợi ích nữa, bạn dùng keyword tên nguyên tắc của nó là “programming to interface not to implement” tìm hiểu nha… nếu bạn thích tìm hiểu thì pm mình giải thích chi tiết cho…

Bài liên quan
0