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.
Bài liên quan
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
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
List
: là một interface.ArrayList
: là một subclass củaList
.Đâ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
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
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…