Bài 28: Những Class được triển khai dựa trên Interface của Java Collection - Lập trình Java cơ bản

Đăng bởi: Admin | Lượt xem: 2321 | Chuyên mục: Java


1. ArrayList trong Java

Lớp ArrayList trong java được sử dụng như một mảng động để lưu trữ các phần tử. Nó kế thừa lớp AbstractList và impliments List Interface.
Các mảng Java chuẩn là có độ dài cố định. Sau khi các mảng được tạo, chúng không thể tăng hoặc giảm kích cỡ, nghĩa là bạn phải có bao nhiêu phần tử mà một mảng sẽ giữ.
ArrayList được tạo với một kích cỡ ban đầu. Khi kích cỡ này bị vượt, collection tự động được tăng. Khi các đối tượng bị gỡ bỏ, ArrayList có thể bị giảm kích cỡ.
Những điểm cần ghi nhớ về lớp ArrayList:
  1. Có thể chứa các phần tử trùng lặp.
  2. Duy trì thứ tự của phần tử được thêm vào.
  3. Không đồng bộ (non-synchronized).
  4. Cho phép truy cập ngẫu nhiên, tốc độ truy xuất (get) phần tử nhanh vì nó lưu dữ liệu theo chỉ mục.
  5. Thao tác thêm/ xóa (add/ remove) phần tử chậm vì cần nhiều sự dịch chuyển nếu bất kỳ phần tử nào thêm/ xoá khỏi danh sách.
Phương thức khởi tạo:
  1. ArrayList(): Khởi tạo một ArrayList rỗng
  2. ArrayList(Collection c): Khởi tạo với các phần tử của collection c.
  3. ArrayList(int capacity): Khởi tạo một Array List mà dung lượng ban đầu được xác định
Ví dụ:
// Java program to demonstrate working of ArrayList in Java 
import java.io.*; 
import java.util.*; 
  
class arrayli 
{ 
    public static void main(String[] args) 
                       throws IOException 
    { 
        // size of ArrayList 
        int n = 5; 
  
        //declaring ArrayList with initial size n 
        ArrayList arrli = new ArrayList(n); 
  
        // Appending the new element at the end of the list 
        for (int i=1; i<=n; i++) 
            arrli.add(i); 
  
        // Printing elements 
        System.out.println(arrli); 
  
        // Remove element at index 3 
        arrli.remove(3); 
  
        // Displaying ArrayList after deletion 
        System.out.println(arrli); 
  
        // Printing elements one by one 
        for (int i=0; i
Kết quả thu được:
[1, 2, 3, 4, 5]
[1, 2, 3, 5]
1 2 3 5

2. LinkedList trong Java

Danh sách có kết nối ( Linked List) là một trong các cách quản lý danh sách dữ liệu khắc phục được các nhược điểm của mảng.
Lớp LinkedList trong java sử dụng cấu trúc danh sách liên kết Doubly Linked List để lưu trữ các phần tử.
Những điểm cần ghi nhớ về lớp LinkedList:
  1. Có thể chứa các phần tử trùng lặp.
  2. Duy trì thứ tự của phần tử được thêm vào.
  3. Không đồng bộ (non-synchronized).
  4. Thao tác thêm/ xóa (add/ remove) phần tử nhanh vì không cần phải dịch chuyển nếu bất kỳ phần tử nào thêm/ xoá khỏi danh sách.
  5. LinkedList có thể được sử dụng như danh sách (list), stack (ngăn xếp) hoặc queue (hàng đợi).
  6. Các phần tử trong LinkedList có thể nằm cách ly nhau (không liên tục) trong bộ nhớ. Nó là một liên kết có tính hai chiều giữa các phần tử. Mỗi phần tử trong danh sách cầm giữ một tham chiếu đến đối phần tử đằng trước nó và tham chiếu đến phần tử ngay sau nó.
Phương thức khởi tạo:
  1. LinkedList(): Khởi tạo một linked-list trống:
  2. LinkedList(Collection C):Khởi tạo một linked-list mà được khởi tạo với các phần tử trong collection c.
Ví dụ:
// Java code for Linked List implementation 
  
import java.util.*; 
  
public class Test 
{ 
    public static void main(String args[]) 
    { 
        // Creating object of class linked list 
        LinkedList object = new LinkedList(); 
  
        // Adding elements to the linked list 
        object.add("A"); 
        object.add("B"); 
        object.addLast("C"); 
        object.addFirst("D"); 
        object.add(2, "E"); 
        object.add("F"); 
        object.add("G"); 
        System.out.println("Linked list : " + object); 
  
        // Removing elements from the linked list 
        object.remove("B"); 
        object.remove(3); 
        object.removeFirst(); 
        object.removeLast(); 
        System.out.println("Linked list after deletion: " + object); 
  
        // Finding elements in the linked list 
        boolean status = object.contains("E"); 
  
        if(status) 
            System.out.println("List contains the element 'E' "); 
        else
            System.out.println("List doesn't contain the element 'E'"); 
  
        // Number of elements in the linked list 
        int size = object.size(); 
        System.out.println("Size of linked list = " + size); 
  
        // Get and set elements from linked list 
        Object element = object.get(2); 
        System.out.println("Element returned by get() : " + element); 
        object.set(2, "Y"); 
        System.out.println("Linked list after change : " + object); 
    } 
}
Kết quả thu được:
Linked list : [D, A, E, B, C, F, G]
Linked list after deletion: [A, E, F]
List contains the element 'E' 
Size of linked list = 3
Element returned by get() : F
Linked list after change : [A, E, Y]

3. HashSet trong Java

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
Một hash table lưu giữ thông tin bởi sử dụng một kỹ thuật được gọi là hashing. Trong hashing, nội dung mang tính thông tin của một key được sử dụng để quyết định một value duy nhất, được gọi là hash code của nó.
Hash code sau đó được sử dụng như là index, tại đó dữ liệu mà liên kết với key được lưu giữ. Phép biến đổi của key vào trong hash code của nó được thực hiện tự động.
Phương thức khởi tạo:
  1. HashSet h = new HashSet() : Khởi tạo một hash set mặc định.
  2. HashSet h = new HashSet(int initialCapacity): Khởi tạo hash code bởi sử dụng các phần tử trong c.
  3. HashSet h = new HashSet(int initialCapacity, float loadFactor): Khởi tạo dung lượng của hash set là capacity.
  4. HashSet h = new HashSet(Collection C): Khởi tạo cả dung lượng và fill ratio (cũng được gọi là dung lượng tải) của hash set từ các tham số của nó.
Ví dụ:
// Java program to demonstrate working of HashSet 
import java.util.*; 
  
class Test 
{ 
    public static void main(String[]args) 
    { 
        HashSet h = new HashSet(); 
  
        // Adding elements into HashSet usind add() 
        h.add("India"); 
        h.add("Australia"); 
        h.add("South Africa"); 
        h.add("India");// adding duplicate elements 
  
        // Displaying the HashSet 
        System.out.println(h); 
        System.out.println("List contains India or not:" + 
                           h.contains("India")); 
  
        // Removing items from HashSet using remove() 
        h.remove("Australia"); 
        System.out.println("List after removing Australia:"+h); 
  
        // Iterating over hash set items 
        System.out.println("Iterating over list:"); 
        Iterator i = h.iterator(); 
        while (i.hasNext()) 
            System.out.println(i.next()); 
    } 
}
Kết quả thu được:
[South Africa, Australia, India]
List contains India or not:true
List after removing Australia:[South Africa, India]
Iterating over list:
South Africa
India

4. TreeSet trong Java

Lớp TreeSet trong Java cung cấp một sự triển khai của Set Interface mà sử dụng một tree cho lưu giữ. Các đối tượng được lưu giữ được xếp thứ tự tăng dần.
Thời gian truy cập và thu nhận dữ liệu là khá nhanh, làm cho TreeSet như là một lựa chọn tuyệt vời khi lưu giữ một lượng lớn thông tin đã xếp thứ tự mà phải được tìm kiếm một cách nhanh chóng.
Phương thức khởi tạo:
  1. TreeSet t = new TreeSet();
    Khởi tạo một TreeSet trống mà sẽ được xếp thứ tự tăng dần theo thứ tự tự nhiên của các phần tử của nó.
  2. TreeSet t = new TreeSet(Comparator comp);
    Khởi tạo một TreeSet mà chứa các phần tử của c.
  3. TreeSet t = new TreeSet(Collection col);
    Khởi tạo một TreeSet trống mà sẽ được xếp thứ tự theo bộ so sánh được xác định bởi comp.
  4. TreeSet t = new TreeSet(SortedSet s);
    Khởi tạo một TreeSet mà chứa các phần tử của ss.
Ví dụ:
// Java program to demonstrate insertions in TreeSet 
import java.util.*; 
  
class TreeSetDemo { 
    public static void main(String[] args) 
    { 
        TreeSet ts1 = new TreeSet(); 
  
        // Elements are added using add() method 
        ts1.add("A"); 
        ts1.add("B"); 
        ts1.add("C"); 
  
        // Duplicates will not get insert 
        ts1.add("C"); 
  
        // Elements get stored in default natural 
        // Sorting Order(Ascending) 
        System.out.println(ts1); 
    } 
}
Kết quả thu được:
[A, B, C]

5. HashMap trong Java

Lớp HashMap trong Java sử dụng một hashtable để triển khai Map Interface. Điều này cho phép thời gian thực thi các hoạt động cơ bản, như get() và put().
Phương thức khởi tạo:
  1. HashMap(): Khởi tạo một HashMap mặc định.
  2. HashMap(int initial capacity): Khởi tạo một HashMap bởi sử dụng các phần tử của m.
  3. HashMap(int initial capacity, float loadFactor): Khởi tạo dung lượng của hash map tới capacity.
  4. HashMap(Map map): Khởi tạo cả dung lượng và fill ratio của hash map bởi sử dụng các tham số của nó.
Ví dụ:
import java.util.HashMap; 
import java.util.Map; 
  
public class HashMapDemo{ 
    public static void main(String[] args) 
    { 
  
        HashMap map 
            = new HashMap<>(); 
  
        print(map); 
        map.put("vishal", 10); 
        map.put("sachin", 30); 
        map.put("vaibhav", 20); 
  
        System.out.println("Size of map is:- "
                           + map.size()); 
  
        print(map); 
        if (map.containsKey("vishal")) { 
            Integer a = map.get("vishal"); 
            System.out.println("value for key"
                               + " \"vishal\" is:- "
                               + a); 
        } 
  
        map.clear(); 
        print(map); 
    } 
  
    public static void print(Map map) 
    { 
        if (map.isEmpty()) { 
            System.out.println("map is empty"); 
        } 
  
        else { 
            System.out.println(map); 
        } 
    } 
}
Kết quả thu được:
map is empty
Size of map is:- 3
{vaibhav=20, vishal=10, sachin=30}
value for key "vishal" is:- 10
map is empty

6. TreeMap trong Java

Lớp TreeMap trong Java triển khai Map Interface bởi sử dụng một tree. Một TreeMap cung cấp các phương thức hiệu quả để lưu giữ các cặp key/value trong thứ tự được sắp xếp, và cho phép thu hồi nhanh chóng.
Bạn nên chú ý rằng, không giống một hash map, một tree map bảo đảm rằng các phần tử của nó sẽ được xếp thứ tự theo thứ tự key tăng dần.
Phương thức khởi tạo:
  1. TreeMap(): Khởi tạo một tree map trống mà sẽ được xếp thứ tự bởi sử dụng thứ tự tự nhiên cho các key.
  2. TreeMap(Map m): Khởi tạo một tree map với các entry từ m, mà sẽ được xếp thứ tự tự nhiên các key của nó.
  3. TreeMap(Comparator comp): Khởi tạo một tree set trống mà sẽ được xếp thứ tự theo bộ so sánh được xác định bởi comp.
  4. TreeMap(SortedMap sm): Khởi tạo một tree map với các entry từ m, mà sẽ được xếp thứ tự giống như sm.
Ví dụ:
import java.util.*;

public class TreeMapDemo {

   public static void main(String args[]) {
      // Tao mot hash map
      TreeMap tm = new TreeMap();
      // Dat cac phan tu vao map
      tm.put("Zara", new Double(3434.34));
      tm.put("Mahnaz", new Double(123.22));
      tm.put("Ayan", new Double(1378.00));
      tm.put("Daisy", new Double(99.22));
      tm.put("Qadir", new Double(-19.08));
      
	  // Lay mot tap hop cac entry
      Set set = tm.entrySet();
      // Lay mot iterator
      Iterator i = set.iterator();
      // Hien thi cac phan tu
      while(i.hasNext()) {
         Map.Entry me = (Map.Entry)i.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
      System.out.println();
      // Gui 1000 vao trong tai khoan cua Zara
      double balance = ((Double)tm.get("Zara")).doubleValue();
      tm.put("Zara", new Double(balance + 1000));
      System.out.println("Balance hien tai cua Zara la: " +
      tm.get("Zara"));
   }
}
Kết quả thu được:
Ayan: 1378.0
Daisy 99.22
Mahnaz: 123.22
Qadir: -19.08
Zara: 3434.34
Balance hien tai cua Zara la: 4434.34
Như vậy, qua bài học này, mình đã giới thiệu đến các bạn những class thường được sử dụng trong Java khi thao tác với tập hợp. Cảm ơn các bạn đã đọc.
Bài tiếp theo: Khái niệm xử lý ngoại lệ trong Java >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!