Tổng quan về Collection trong Java

Để tiếp tục seri java căn bản thì hôm này mình sẽ viết tiếp về collection trong java, có nhiều người hỏi sao không viết tuần tự đi mà cứ nhảy cóc như thế này, thì mình xin trả lời là việc viết blog như này cũng chính là cách mình tự học và hệ thống lại kiến thức. Nên phần nào mà bản thân cảm thấy yếu, chưa chắc chắn lắm hoặc có hứng thú thì mình sẽ viết 😀
Thì hôm nay mình sẽ cùng đi tìm hiểu về collection trong java. Nghe khá quen thuộc đúng không, chắc hẳn ai theo ngành lập trình thì đều biết hoặc ít nhất đã từng nghe qua về nó rồi. Một điều cần lưu ý và dễ gây nhẫm lẫn cho những bạn mới học hay mới làm quen với vấn đề này. Đó là sự nhầm lẫn giữa Collection vs Collections
“Collection” và “Collections” trong java là hai khái niệm khác nhau.

Collections trong java là một khuôn khổ cung cấp một kiến trúc để lưu trữ và thao tác tới nhóm các đối tượng. Tất cả các hoạt động mà bạn thực hiện trên một dữ liệu như tìm kiếm, phân loại, chèn, xóa,… có thể được thực hiện bởi Java Collections.

Collection trong java là một root interface trong hệ thống cấp bậc Collection. Java Collection cung cấp nhiều interface (Set, List, Queue, Deque vv) và các lớp (ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet…).

Và vấn đề mình đề cập đến trong bài viết này là Collection. Còn về Collections thì có thể ở những bài viết sau mình cũng sẽ nói tới.
Chỉ cần biết là nó khác nhau thôi còn khác nhau như thế nào và bản chất mỗi cái ra sao chúng ra cùng đi tìm hiểu nào. Lest go!

  1. Giới thiệu:
    Collection hay còn hiểu nôm na là 1 tập hợp. Tập hợp là 1 sự tụ tập của một số hữu hạn hay vô hạn các đối tượng nào đó. Người ta khẳng định những đối tượng này được gọi là các phần tử của tập hợp và bất kỳ một đối tượng nào cũng đều có thể được đưa vào một tập hợp(theo wiki).
    Vậy trong lập trình thì tập hợp được hiểu như thế nào ?

Java cũng như các ngôn ngữ khác hỗ trợ mảng (array) như một tập hợp cơ bản nhất, xong việc làm việc với mảng là không thuận tiện trong nhiều trường hợp bởi vì trong thời gian sống của mảng việc tăng thêm phần tử hoặc xóa các phần tử của mảng rất khó khăn và phải trả giá đắt về hiệu năng chương trình nếu cố tình làm điều đó .Hình minh họa một mảng:

Các giới hạn của việc sử dụng mảng (Array)

  • Mảng rất cơ bản và quen thuộc .
    • Lưu trữ các kiểu tham chiếu (object), các kiểu nguyên thủy (primitive type).
    • int[] myArray = new int[]{1,4,3};
    • Object[] myArrayObj = new Object[] { “Object”, new Integer(100) };
  • Mảng có kích cỡ và số chiều cố định.
    • Khó khăn cho việc mở rộng mảng
  • Các phần tử được đặt và tham chiếu một cách liên tiếp nhau trong bộ nhớ.
    • Khó khăn cho việc xóa một phần tử ra khỏi mảng .

Xóa phần tử ra khỏi mảng

Các phần tử của một mảng được đặt liên tiếp nhau trong bộ nhớ điều đó là khó khăn khi bạn cố tình bỏ đi một phần tử nào đó trong mảng, nó mất tính liên tiếp. Thông thường một kỹ thuật mà thường sử dụng là tạo một mảng mới lưu trữ các đối tượng của mảng ban đầu và bỏ đi các phần tử không cần thiết, nhưng điều này làm giảm hiệu năng của chương trình. Với trường hợp mở rộng mảng cũng với kỹ thuật tương tự là khởi tạo một mảng mới với kích cỡ lớn hơn sau đó thì copy các phần tử mảng cũ sang cho mảng mới.
Rõ ràng mảng không phải là một cách tốt cho nhiều trường hợp của ứng dụng .

Và việc xử dụng Array ngày nay không được khuyến khích vì có quá nhiều nhược điểm, thay vào đó chúng ta có Collection. Chúng có thể khắc phục được nhược điểm của array.
Và 1 điều nhấn mạnh cho các bạn là : Array không phải Collection.
Mình đã từng bị nhầm điều này trước đây 😀

Mình vừa nói là Collection sinh ra và nó khắc phục được các nhược điểm của mảng, vậy Collection chính xác là gì, nó là tập hợp của những thứ gì, và vì sao nó lại có thể khắc phục được những điểm yếu của mảng. Chúng ta bắt đầu tìm hiểu nào.

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

Các kiểu tập hợp của Collection Framework được xây dựng trên cơ sở một số interface trong package java.util. Và được phân chia ra làm 2 hệ thống phân cấp dẫn đầu bởi 2 interface java.util.Collection chứa danh sách các đối tượng và java.util.Map chứa các cặp key/value.

Dưới đây là mô tả những interface chính của Collection

  • Set: là một collection không thể chứa 2 giá trị trùng lặp. Set được sử dụng để biểu diễn các bộ, chẳng hạn như bộ tú lu khơ, thời khóa biểu của học sinh, các tiến trình đang chạy trên máy tính…
  • List: là một collection có thứ tự (đôi khi còn được gọi là một chuỗi). List có thể chứa các phần tử trùng lặp. Thường có quyền kiểm soát chính xác vị trí các phần tử được chèn vào và có thể truy cập chúng bằng index (vị trí của chúng).
  • Queue (hàng đợi): là một collection được sử dụng để chứa nhiều phần tử trước khi xử lý. Bên cạnh các thao tác cơ bản của collection, Queue cung cấp các thao tác bổ sung như chèn, lấy ra và kiểm tra. Queue có thể được sử dụng như là FIFO (first-in, first-out – vào trước, ra trước)
  • Deque: là một collection được sử dụng để chứa nhiều phần tử trước khi xử lý. Ngoài các thao tác cơ bản của collection, một Deque cung cấp các thao tác bổ sung như chèn, lấy ra và kiểm tra. Deques có thể được sử dụng như là FIFO (first-in, first-out – vào trước, ra trước) và LIFO (last-in, first-out – vào sau, ra trước). Trong một Deque, tất cả các phần tử mới có thể được chèn vào, lấy ra và lấy ra ở cả hai đầu.
  • Map: là một đối tượng ánh xạ mỗi key tương úng với một giá trị. Map không thể chứa giá trị trùng lặp. Mỗi key có thể ánh xạ đến nhiều nhất một giá trị.

Dưới đây là mô tả 2 interface được sắp xếp của Set mà Map

  • SortedSet: là một Set chứa các phần tử theo thứ tự tăng dần.
  • SortedMap: là một Map chứa các phần tử được sắp xếp theo thứ tự tăng dần của key của chúng. Các SortedMap được sử dụng cho các collection theo thứ tự tự nhiên của cặp key/value, chẳng hạn như từ điển và danh bạ điện thoại.

Iterable interface

Iterable interface chứa dữ liệu thành viên Iterator interface

Iterator interface

Giao tiếp Iterator cung cấp phương tiện để lặp đi lặp lại các thành phần từ đầu đến cuối của một collection.

Các phương thức của Iterator interface

Chỉ có ba phương pháp trong giao tiếp Iterator như sau:

Các phương thức của interface Collection trong java

Có nhiều phương thức được khai báo trong interface Collection như sau:

Mình sẽ ví dụ về collection trong java:

Đây sẽ là đoạn import thư viện để có thể sử dụng các Collection.

Còn đây sẽ là đoạn Output sau khi mình chạy đoạn code trên.

Duyệt các phần tử của collection

Có 2 cách để duyệt các phần tử của collection trong java.

  1. Sử dụng Iterator interface.
  2. Sử dụng vòng lặp for-each.

Đây sẽ là output:

Như bạn đã thấy có rất nhiều cách để duyệt 1 list, và bài hôm nay mình giới thiệu qua cho các bạn về Collection. Còn rất nhiều các dạng của collection mà mình chưa đề cập đến. Mình chỉ lấy ví dụ những cái phổ biến và thường xuyên được sử dụng để các bạn có thể phần nào hình dung được collection là gì. Ở bài tiếp theo thì mình sẽ đi sâu hơn về từng loại trong collection. Cách thức chúng lưu trữ, xử lý dữ liệu như thế nào. Và ưu, nhược điểm của từng cái để bạn biết khi nào cần dùng đến chúng và để áp dựng xử lý các bài toàn phù hợp. Hẹn gặp lại vào tối mai 😀

Đăng bởi Đào Văn Đô

Công chúa chỉ hôn con ếch khi biết chắc nó sẽ biến thành hoàng tử, người đẹp chỉ sống với quái vật khi rõ ràng anh ấy vốn là đại gia. Cuộc sống vốn dĩ là vậy, cách người ta đối xử với mình còn tuỳ thuộc xem mình là ai.

One thought on “Tổng quan về Collection trong Java

Bình luận về bài viết này

Tạo trang giống vầy với WordPress.com
Tham gia