12/08/2018, 16:35

giới thiệu về collection trong java

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à hiệu năng chương trình không ...

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à hiệu năng chương trình không cao.Collections ra đời là để khắc phục những hạn chế về kích thước khi khai báo mảng và sử dụng trong Java. Ngoài ra Collections là một tập các lớp dùng để lưu trữ danh sách và có khả năng tự điều chinhr khi danh sách đó thay đổi, ví dụ như khi chúng ta thêm, sửa, xóa, chèn phần tử trong danh sách đó. Collections còn được dùng để lưu trữ, truy xuất, tơng tác với dữ liệu và truyền dữ liệu.

Trong Java, các Collections Framework cung cấp những thành phần sau:

STT Thành Phần Mô tả
1 Interfaces Kiểu dữ liệu trừu tượng (abstract) biểu diễn Collections.
2 Implementations Là sự triển khai các Interface, ví dụ như các Class.
3 Algorithms (các thuật toán) Là các phương thức dùng để thực thi các phép toán như tìm kiếm và sắp xếp trên các đối tượng mà triển khai các Interface.

Interface Collections

  • Mô tả collection interface:
  • Hai hệ thống phân cấp dẫn đầu bởi 2 interface Collection và Map.
  • Nhóm Collection lưu trữ các đối tượng. Có 3 nhánh con trong nhóm Collection: Queue, List, Set . Các phần tử có thể giống nhau hoặc không phụ thuộc vào thuộc nhánh nào trong 3 nhánh kể trên. (Sẽ được nói đến sau) .
  • Nhóm Map lưu trữ các cặp key/value Các cặp key/value chứa trong Map là luôn có key khác nhau giữa các cặp Nếu biết key có thể lấy ra giá trị value trong Map ứng với key này .
STT Tên interface Mô tả
1 LIst<E> Các phần tử trong List Interface được sắp xếp có thứ tự và có thể có giá trị giống nhau.Cho phép chứa các phần tử trùng lặp.Cho phép chứa nhiều phần tử null
2 Set Các phần tử trong Set là duy nhất. Không cho phép chứa các phần tử trùng lặp.Tùy theo class thi hành Set hỗ trợ chứa phần tử null hay không .Nếu có hỗ trợ thì chỉ chứa nhiều nhất 1 phần tử null nếu có.
3 Queue Cho phép chứa các phần tử trùng lặp.Không cho phép chứa các phần tử null
4 SortedSet Là 1 dạng riêng của Set Interface, trong đó giá trị của các phần tử mặc định được sắp xếp tăng dần.
5 Map Giá trị của mỗi phần tử trong Map bao gồm key và giá trị tương ứng của key đó (value) và key của các phần tử này là duy nhất.
6 SortedMap Là 1 dạng riêng của Map Interface, trong đó giá trị key được sắp xếp tăng dần.

Các implement

STT Tên class Mô tả
1 LinkedList Là 1 cấu trúc dữ liệu lưu trữ các phần tử dưới dạng danh sách. Các phần tử trong LinkedList được sắp xếp có thứ tự và có thể có giá trị giống nhau.
2 ArrayList Là kiểu danh sách sử dụng cấu trúc mảng để lưu trữ phần tử. Thứ tự các phần tử dựa theo thứ tự lúc thêm vào và giá trị của các phần tử này có thể trùng nhau.
3 HashSet Thứ tự các phần tử trong HashSet không dựa theo thứ tự lúc thêm vào và giá trị của các phần tử này là duy nhất.
4 TreeSet Các phần tử trong TreeSet mặc định được sắp xếp tăng dần và giá trị của các phần tử này là duy nhất.

Một số Class hay dùng

Trong java, một số collection chúng ta hay sử dụng như: LinkedList, ArrayList, HashSet, TreeSet...Chúng ta sẽ đi sâu vào một số class thường dùng như này:

LinkedList

Lớp LinkedList hỗ trợ hai constructor. Constructor đầu tiên xây dựng một linked-list trống:

List linkedList = new LinkedList( );

hoặc khởi tạo linkedlist thông qua:

LinkedList(Collection c)

Các phương thức:

  • void add(int index, Object element)
  • boolean add(Object o)
  • boolean addAll(Collection c)
  • boolean addAll(int index, Collection c)
  • void addFirst(Object o)
  • void addLast(Object o)
  • void clear()
  • Object clone()
  • boolean contains(Object o)
  • Object get(int index)
  • Object getFirst()
  • Object getLast()
  • int indexOf(Object o)
  • int lastIndexOf(Object o)
  • ListIterator listIterator(int index)
  • Object remove(int index)
  • boolean remove(Object o)
  • Object removeFirst()
  • Object removeLast()
  • Object set(int index, Object element)
  • int size()
  • Object[] toArray()
  • Object[] toArray(Object[] a) Ví dụ cơ bản:
> public class LinkedListDemo {
> 
>    public static void main(String args[]) {
>       // khởi tạo linkedList
>       LinkedList ll = new LinkedList();
>       // them cac phan tu toi linked list
>       ll.add("A");
>       ll.add("B");
>       ll.add("C");
>       ll.add("D");
>       ll.add("E");
>       System.out.println("result: " + ll);
>       // delete element in linkedList
>       ll.remove("A");
>       ll.remove(3);
>       System.out.println("Kết quả sau khi xóa: "+ ll);
>       
>       // xóa phần tử đầu tiên và cuối cùng
>       ll.removeFirst();
>       ll.removeLast();
>       System.out.println("Kết quả sau khi xóa phâng tử đầu tiên và cuối cùng : " + ll);
>    }
> }
> 

ArrayList

arrayList khá giống với linkedList, class này cũng có đầy đủ các method như linkList cách sử dụng:

> public class ArrayListDemo {
>    public static void main(String args[]) {
>       // Khởi tạo 1 arrayList
>       ArrayList al = new ArrayList();
>       System.out.println("Size ban dau cua ArrayList la: " + al.size());
>       
>       // thêm các phần tử vào arrayList
>       al.add("A");
>       al.add("C");
>       al.add("B");
>       al.add("D");
>       al.add("H");
>       System.out.println("result: " + al.size());
>       
>       // xóa các phần tử trong arrayList
>       al.remove("B");
>       al.remove(4);
>       System.out.println("Kết quả sau khi xóa: " + al);
>    }
> }

HashSet

  • Lớp HashSet trong Java kế thừa AbstractSet và triển khai Set Interface. Nó tạo một collection mà sử dụng một hash table để lưu giữ. Lưu ý trong hashset chỉ chứa các phần tử duy nhất, không chấp nhận 2 phần tử trùng nhau:
  • Lớp HashSet trông Java hỗ trợ 4 constructor. Mẫu constructor đầu tiên xây dựng một hash set mặc định: -HashSet( ), HashSet(Collection c), HashSet(int capacity), HashSet(int capacity, float fillRatio)
  • Các phuowng thức:
  • boolean add(Object o)
  • void clear()
  • Object clone()
  • boolean contains(Object o)
  • boolean isEmpty()
  • Iterator iterator()
  • boolean remove(Object o)
  • int size()

Ví dụ cơ bản:

> public class HashSetDemo {
> 
>    public static void main(String args[]) {
>       // khởi tạo hashSet
>       HashSet hs = new HashSet();
>       // Thêm cá phần tử vào hashset.
>       hs.add("A");
>       hs.add("B");
>       hs.add("C");
>       hs.add("D");
>       hs.add("E");
>       hs.add("E");
>       hs.add("F");
>       // Giá trị E hiển thị chỉ 1 lần.
>       System.out.println("Kết quả"  + hs);
>    }
> }

Bài này giới thiệu về collection dến đây là hết. thank you.

0