Collection framework và các bài toán nằm lòng trong java

Hẳn rằng khi lập trình chúng ta phải giải quyết rất nhiều bài toán để có được kết quả mong muốn. Và nếu các bạn nhìn lại một chút thì sẽ toá hoả rằng chúng ta sẽ dụng rất nhiều các collection để lưu trữ và xử lý dữ liệu.

Các bạn đã sử dụng quá quen thuộc với hai dòng code ở trên?

Các bạn đã sử dụng chúng rất nhiều trong các bài tập ở trường?

Vậy có bao giờ các bạn tự hỏi liệu hai cách viết trên có khác nhau gì không?

Trước khi trả lời câu hỏi trêm, chúng ta sẽ xem sơ qua một chút khái niệm về collection trong java.

Collections trong java

Collection trong java là một famework cung cấp các kiến trúc để lưu trữ và sử dụng một nhóm các đối tượng.

Trước khi collection được giới thiệu, Để nhóm các đối tượng trong java chúng ta có Arrays, Vectors hay là HashTables. 

Với mỗi loại trên chúng ta sẽ có các cách thêm và truy cập khác nhau, chúng lại không các interface chung khiến cho các java dev lúc bấy giờ cảm thấy khó chịu.

Một hạn chế nữa các method trong ‘Vector’ là final, hiểu đơn giản là bạn sẽ không thể extend ‘Vector’ class để implement các collection tương tự.

Để giải quyết các rắc rối trên, các nhà phát triển java đã cho ra đời Collection Framework trong bản JDK 1.2.

Hệ thống phân cấp của Collection Framework

collection ịn java

 

Nhìn sơ đồ trên có lẽ chúng ta sẽ thật sự choáng ngợp, thật ra mình cũng vậy. Thế nhưng các bạn đừng lo, hãy xem sơ đồ này như bức tranh toàn cảnh. Chúng ta sẽ đi tìm hiểu những collection hay dùng nhất, sau đó mới tính đến máy cái kia nha.

Giới thiệu sơ một xíu.

Collection là một interface với những method căn bản như: add(), remove(), contains(), isEmpty(), addAll(), … etc.

Collection interface java.util.Collection và Map interface java.util.Map là 2 thành phần chính khác nhau, =) cái này mình thấy phỏng vấn người ta hay hỏi. 

Như vậy, với việc các class khác như HashSet, ArrayList etc, mặc dù chúng có các đặc thù riêng nhưng chắc rằng chúng sẽ có các method như trên bởi vì chúng đều implement từ collection interface.

List: là một danh sách các phần tử có thứ tự, List có thể chứa hai hoặc nhiều các phần tử giống nhau. 

Set: Là một danh chứa các phần tử không có thứ tự, và không cho phép các phần tử trùng nhau.

Map: Lưu trữ các phần tử theo cặp giá trị (key, value), không cho phép có cặp key trùng nhau.

Queue: Lưu các phần tử theo công thứ FIFO (First In First Out).

Phần kết

Đến đây, thì có lẽ chúng ta sẽ dễ dàng trả lời câu hỏi ở đầu bài rồi phải không nào? Chúng ta có ArrayList implements <interface> List. thế nên hai cách khai báo ở trên là hoàn toàn hợp lệ. Nhưng mình khuyên nên dùng cách (1)

Vì nó thể hiện rõ phong cách hướng đối tượng của java. Chúng ta có thể linh động hơn trong việc tạo các collection khác nhau implement từ interface List.

Mục lục

ArrayList trong java

LinkedList trong java

Leave a Reply

Your email address will not be published. Required fields are marked *