Để sắp xếp ArrayList có kiểu dữ liệu là String, ta dùng method Collections.sort(arraylist), dữ liệu được chứa trong ArrayList sẽ được sắp xếp theo thứ tự alphabetic.
Ví dụ.
package simplecodecjava.blogspot.com; import java.util.ArrayList; import java.util.Collections; public class SortingInArrayList { public static void main(String[] args){ ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("Hà Nội"); arrayList.add("Đà Nẵng"); arrayList.add("Nha Trang"); arrayList.add("TP.Hồ Chí Minh"); System.out.println("Trước khi sắp xếp"); for(String item: arrayList){ System.out.println(item); } Collections.sort(arrayList); System.out.println("Sau khi sắp xếp"); for(String item: arrayList){ System.out.println(item); } } }Kết quả output:
Trước khi sắp xếp Hà Nội Đà Nẵng Nha Trang TP.Hồ Chí Minh Sau khi sắp xếp Hà Nội Nha Trang TP.Hồ Chí Minh Đà Nẵng
*note: Trong bảng mã Unicode ký tự Đ đứng sau ký tự T2. Sắp xếp mảng Interger ArrayList.
Tương tự như với mảng String, phương thức Collections.sort(arraylist) cũng được dùng để sắp xếp mảng Interger.
Ví dụ
package simplecodecjava.blogspot.com; import java.util.ArrayList; import java.util.Collections; public class SortingInArrayList { public static void main(String[] args){ ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(10); arrayList.add(2); arrayList.add(221); arrayList.add(991); System.out.println("Trước khi sắp xếp"); for(Integer item: arrayList){ System.out.println(item); } Collections.sort(arrayList); System.out.println("Sau khi sắp xếp"); for(Integer item: arrayList){ System.out.println(item); } } }Output:
Trước khi sắp xếp 10 2 221 991 Sau khi sắp xếp 2 10 221 9913. Sắp xếp mảng Object ArrayList
Phương thức Collections.sort(arraylist) cũng được dùng để sắp xếp mảng đối tượng, tuy nhiên đối tượng cần phải là lớp thực thi của Comparable interaface hoặc viết lại phương thức compare của Comparator interface.
Trước tiên hãy xem ví dụ sau khi dùng Collections.sort(arraylist) mà chưa cài đặt bằng một trong hai cách trên.
package simplecodecjava.blogspot.com; public class Student { private int MSV; private String ten; private int namsinh; private String khoa; public Student(int MSV, String ten, int namsinh, String khoa){ this.MSV = MSV; this.ten = ten; this.namsinh = namsinh; this.khoa = khoa; } @Override public String toString() { return MSV + " - " + ten + " - " + namsinh + " - " + khoa; } }Main chương trình:
package simplecodecjava.blogspot.com; import java.util.ArrayList; import java.util.Collections; public class SortingInArrayList { public static void main(String[] args){ ArrayList<Student> arrayList = new ArrayList<Student>(); arrayList.add(new Student(1, "Cảnh", 1991, "Công nghệ thông tin")); arrayList.add(new Student(5, "Tuấn", 1992, "Công nghệ thông tin")); arrayList.add(new Student(9, "Việt", 1994, "Điện tử viễn thông")); arrayList.add(new Student(1, "Tú Anh", 1993, "Công nghệ thông tin")); arrayList.add(new Student(1, "Liên", 1991, "Điện tử viễn thông")); arrayList.add(new Student(1, "Hiệp", 1990, "Điện tử viễn thông")); arrayList.add(new Student(1, "Quỳnh", 1992, "Công nghệ thông tin")); System.out.println("Trước khi sắp xếp"); for(Student item: arrayList){ System.out.println(item); } Collections.sort(arrayList); System.out.println("Sau khi sắp xếp"); for(Student item: arrayList){ System.out.println(item); } } }Với chương trình main trên, sẽ có thông báo lỗi ở dòng
Collections.sort(arrayList);Với lỗi thông báo như sau:
Bound mismatch: The generic method sort(ListLỗi trên có thể được fix bằng một trong hai cách sau:) of type Collections is not applicable for the arguments (ArrayList ). The inferred type Student is not a valid substitute for the bounded parameter >
3.1 Cài đặt Class Student là lớp thực thi của Comparable interaface.
package simplecodecjava.blogspot.com; public class Student implements Comparable<Student>{ private int MSV; private String ten; private int namsinh; private String khoa; public Student(int MSV, String ten, int namsinh, String khoa){ this.MSV = MSV; this.ten = ten; this.namsinh = namsinh; this.khoa = khoa; } @Override public String toString() { return MSV + " - " + ten + " - " + namsinh + " - " + khoa; } // sắp xếp sinh viên theo tên và theo khoa. @Override public int compareTo(Student o) { if(this.khoa.compareTo(o.khoa)== 0){ return this.ten.compareTo(o.ten); }else{ return this.khoa.compareTo(o.khoa); } } }Output: Sắp xếp sinh viên theo khoa và theo tên theo thứ tự tăng dần.
Trước khi sắp xếp 1 - Cảnh - 1991 - Công nghệ thông tin 5 - Tuấn - 1992 - Công nghệ thông tin 9 - Việt - 1994 - Điện tử viễn thông 10 - Tú Anh - 1993 - Công nghệ thông tin 22 - Liên - 1991 - Điện tử viễn thông 17 - Hiệp - 1990 - Điện tử viễn thông 23 - Quỳnh - 1992 - Công nghệ thông tin Sau khi sắp xếp 1 - Cảnh - 1991 - Công nghệ thông tin 23 - Quỳnh - 1992 - Công nghệ thông tin 5 - Tuấn - 1992 - Công nghệ thông tin 10 - Tú Anh - 1993 - Công nghệ thông tin 17 - Hiệp - 1990 - Điện tử viễn thông 22 - Liên - 1991 - Điện tử viễn thông 9 - Việt - 1994 - Điện tử viễn thông3.2 Viết lại phương thức compare của Comparator interface.
Với cách này chúng ta không cần cài đặt Student là lớp thực thi từ Comparator interface như ở 3.1, thay vào đó phương thức compare của Comparator interace được viết lại như sau:
package simplecodecjava.blogspot.com; import java.util.Comparator; public class Student{ private int MSV; private String ten; private int namsinh; private String khoa; public Student(int MSV, String ten, int namsinh, String khoa){ this.MSV = MSV; this.ten = ten; this.namsinh = namsinh; this.khoa = khoa; } @Override public String toString() { return MSV + " - " + ten + " - " + namsinh + " - " + khoa; } public static Comparator<Student> compare = new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { if(o1.khoa.compareTo(o2.khoa)== 0){ return o1.ten.compareTo(o2.ten); }else{ return o1.khoa.compareTo(o2.khoa); } } }; }Main chương trình:
package simplecodecjava.blogspot.com; import java.util.ArrayList; import java.util.Collections; public class SortingInArrayList { public static void main(String[] args){ ArrayList<Student> arrayList = new ArrayList<Student>(); arrayList.add(new Student(1, "Cảnh", 1991, "Công nghệ thông tin")); arrayList.add(new Student(5, "Tuấn", 1992, "Công nghệ thông tin")); arrayList.add(new Student(9, "Việt", 1994, "Điện tử viễn thông")); arrayList.add(new Student(10, "Tú Anh", 1993, "Công nghệ thông tin")); arrayList.add(new Student(22, "Liên", 1991, "Điện tử viễn thông")); arrayList.add(new Student(17, "Hiệp", 1990, "Điện tử viễn thông")); arrayList.add(new Student(23, "Quỳnh", 1992, "Công nghệ thông tin")); System.out.println("Trước khi sắp xếp"); for(Student item: arrayList){ System.out.println(item); } Collections.sort(arrayList, Student.compare); System.out.println("Sau khi sắp xếp"); for(Student item: arrayList){ System.out.println(item); } } }Output:
Trước khi sắp xếp 1 - Cảnh - 1991 - Công nghệ thông tin 5 - Tuấn - 1992 - Công nghệ thông tin 9 - Việt - 1994 - Điện tử viễn thông 10 - Tú Anh - 1993 - Công nghệ thông tin 22 - Liên - 1991 - Điện tử viễn thông 17 - Hiệp - 1990 - Điện tử viễn thông 23 - Quỳnh - 1992 - Công nghệ thông tin Sau khi sắp xếp 1 - Cảnh - 1991 - Công nghệ thông tin 23 - Quỳnh - 1992 - Công nghệ thông tin 5 - Tuấn - 1992 - Công nghệ thông tin 10 - Tú Anh - 1993 - Công nghệ thông tin 17 - Hiệp - 1990 - Điện tử viễn thông 22 - Liên - 1991 - Điện tử viễn thông 9 - Việt - 1994 - Điện tử viễn thông
0 Comment to "[Java] Sắp xếp ArrayList trong Java"
Post a Comment