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.

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

1 Like

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

1 Like

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…:smiley: nếu bạn thích tìm hiểu thì pm mình giải thích chi tiết cho…

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?