Main content:
      An introduction to Java collections
      How to use the ArrayList class
      An Invoice application that uses an array list
      How to use the LinkedList class
      An enhanced version of the Invoice application
      How to work with maps
      How to work with legacy collections
-----------------------------------------------
1. An introduction to Java collections
- Sử dụng ArrayList:


2. How to use the ArrayList class


3. An Invoice application that uses an array list

4. How to use the LinkedList class
- LinkedList như một danh sách liên kết.


- Ví dụ:
import java.util.LinkedList;
public class Main {
  public static void main(String[] args) {
    LinkedList<String> lList = new LinkedList<String>();
    lList.add("1");
    lList.add("2");
    lList.add("3");
    lList.add("4");
    lList.add("5");

    System.out.println("First element of LinkedList is : " + lList.getFirst());
    System.out.println("Last element of LinkedList is : " + lList.getLast());
  }
}

5. An enhanced version of the Invoice application

6. How to work with maps

Khởi tạo từ interface Map, định nghĩa trước kiểu giá trị
  HashMap<IntegerStringhashmap = new HashMap<IntegerString> ();

Chú ý: HashMap chỉ chấp nhận dữ liệu (cả key và value) là các đối tượng. Do đó, các kiểu int, long, double,… không được chấp nhận mà phải dùng Integer, Long, Double,…

Cách thức đưa dữ liệu vào và lấy dữ liệu ra từ đối tượng HashMap:
  hashmap.put (keyvalue); //đưa key và value vào hashmap  hashmap.get(key); // Lấy value tương ứng với key trong hashmap

Ví dụ:
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, String> user = new HashMap<String, String>();
        user.put("ID1", "Nguyen Van X");
        user.put("ID2", "Nguyen Van Y");
        user.put("ID3", "Nguyen Van Z");

        System.out.println(user.get("ID1"));
        System.out.println(user.get("ID2"));
        System.out.println(user.get("ID3"));
    }
}

7. How to work with legacy collections

Bài tập:
1. Tạo một mảng các đối tượng Sinh Viên, mỗi đối tượng gồm 2 thuộc tính tên tuổi. Gán một vài giá trị rồi in danh sách ra màn hình.
Mã nguồn:
import java.util.ArrayList;

class SinhVien {
    public String ten;
    public int tuoi;
}
public class Main {

    public static void main(String[] args) {
        ArrayList<SinhVien> listSV = new ArrayList(); // Khai báo 1 đối tượng ArrayList, các phần tử tạo ra từ lớp SinhVien

        SinhVien a = new SinhVien();
        a.ten = "Nguyen Van A";
        a.tuoi = 19;
        listSV.add(a); // Thêm đối tượng và listSV

        SinhVien b = new SinhVien();
        b.ten = "Nguyen Van B";
        b.tuoi = 20;
        listSV.add(b);

        SinhVien c = new SinhVien();
        c.ten = "Nguyen Van C";
        c.tuoi = 22;
        listSV.add(c);

        System.out.println("Thông tin các sinh viên đã thêm vào ArrayList là: ");
        for(int i=0; i<listSV.size(); i++){
            System.out.println("Tên: "+listSV.get(i).ten+" Tuổi: "+listSV.get(i).tuoi);
        }
    }
}

2. Ví dụ về sử dụng LinkerList
Mã nguồn:
import java.util.LinkedList;

public class Main {
  public static void main(String[] a) {

    LinkedList<String> list = new LinkedList<String>();
    list.add("A");
    list.add("B");
    list.add("C");
    list.add("D");
    list.addFirst("X");
    list.addLast("Z");

    System.out.println(list);
  }
}

Kết quả:

3. Mô tả một kiểu dữ liệu để lưu trữ dữ liệu con rắn trong game Snake, mỗi thành phần con rắn gồm tọa độ x, tọa độ y.
    Viết chương trình mô tả cách lưu trữ dữ liệu con rắn, khởi tạo với độ dài bất kỳ và tạo ra một vị trí ngẫu nhiên mới để con rắn di chuyển tới.

Mã nguồn:



4. Xây dựng một ứng dụng từ điển để lưu trữ, dùng HashMap. Nhập vào một từ và xuất ra ý nghĩa, Viết vòng lặp nhập Y để tiếp tục tra từ và N để kết thúc.

Mã nguồn:
import java.util.HashMap;
import java.util.Scanner;

public class Main {
       public HashMap<String, String> dict = new HashMap<String, String>();
      
       public static void main(String[] args) {
              Main dictionary = new Main();
              // add some test entries to dictionary
              dictionary.addEntry("begin", "bắt đầu");
              dictionary.addEntry("end", "kết thúc");
              dictionary.addEntry("music", "âm nhạc");
              dictionary.addEntry("movie", "điện ảnh");
              dictionary.addEntry("sport", "thể thao");
              dictionary.addEntry("easy", "dễ");

              Scanner scanner = new Scanner(System.in);
              String input, choose;
              do {
                     System.out.print("Nhập từ cần tra: ");
                     input = scanner.nextLine();
                    
                     String strMeaning = dictionary.getMeaning(input);
                     if (strMeaning == null) {
                           System.out.println("Không có trong từ điển");
                     } else {
                           System.out.println("Nghĩa là: " + strMeaning);
                     }
                     System.out.print("Tiếp tục Y/N: ");
                     choose = scanner.nextLine();
              } while (choose.equalsIgnoreCase("Y"));
              System.out.println("Kết thúc");
              scanner.close();
       }

       public void addEntry(String eng, String vie) {
              dict.put(eng, vie);
       }

       public String getMeaning(String eng) {
              return dict.get(eng);
       }
}

Kết quả:

5. Tạo một mảng các đối tượng Sinh Viên, mỗi đối tượng gồm 2 thuộc tính tên điểm. Thực hiện các việc sau:
- Sắp xếp theo thứ tự giảm dần theo điểm. In danh sách ra màn hình.
- Sắp xếp theo thứ tự theo a, b, c, ... In danh sách ra màn hình.

Bài giải:


package dssv;

public class SinhVien {
    String ten;
    double diem;

    public SinhVien(String ten, double diem) {
        this.ten = ten;
        this.diem = diem;
    }

    public String getName() {
        return ten;
    }

    public double getDiem() {
        return diem;
    }

    public void setName(String ten) {
        this.ten = ten;
    }

    public void setDiem(double diem) {
        this.diem = diem;
    }  
   
    public void Print() {
        System.out.println(ten + " - " + diem);
    }
}


package dssv;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class DSSV {
    public static ArrayList<SinhVien> ds = new ArrayList<>();
   
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String continus = "";
        do {
            System.out.print("Ten:");
            String ten = sc.next();
            System.out.print("Diem:");
            double diem = sc.nextDouble();
            SinhVien sv = new SinhVien(ten, diem);
            ds.add(sv);
            System.out.print("Tiep tuc Y/N:");
            continus = sc.next();  
        } while (continus.equalsIgnoreCase("Y"));
       
        //Sap xep theo diem
        SapXepDiem(ds);

        //print
        InDanhSach(ds);
       
        SapXepTen(ds);
        //print
        InDanhSach(ds);      
    }
   
    public static void SapXepDiem(ArrayList<SinhVien> arraylist) {
        Collections.sort(ds, new Comparator<SinhVien>(){
            @Override
            public int compare(SinhVien sv1, SinhVien sv2) {
                if (sv1.diem < sv2.diem) {
                    return -1;
                } else {
                    return 1;
                }
            }
        });
    }
   
    public static void SapXepTen(ArrayList<SinhVien> arraylist) {
        Collections.sort(ds, new Comparator<SinhVien>(){
            @Override
            public int compare(SinhVien sv1, SinhVien sv2) {
                return (sv1.ten.compareTo(sv2.ten));
            }
        });
    }
   
    public static void InDanhSach(ArrayList<SinhVien> arraylist) {
        for(SinhVien sv : arraylist) {
            sv.Print();
        }
    }
}



6. Nhập dữ liệu danh sách nhân viên trong công ty. Các phần tử trong danh sách có các thuộc tính họ tên, năm sinh, lương. Các thuộc tính để private.
   Viết chương trình nhập dữ liệu từ bàn phím thông tin số nhân viên, thông tin từng nhân viên. Cuối chương trình có menu chọn.
- Nếu ấn 1 thì sắp xếp theo thứ tự tên a, b, c. In danh sách ra màn hình.
- Nếu ấn 2 thì sắp xếp theo mức lương giảm dần từ người cao xuống người thấp. In danh sách ra màn hình.
- Nếu ấn 3 thì nhập vào một tên và thực hiện tìm kiếm thông tin người này trong danh sách. Nếu có thì in thông tin người này ra. Nếu "không có thì in ra không tìm thấy".


Bài giải: