Sắp Xếp Arraylist Trong Java

     

Sắp xếp vào collection

Thực ra việc bố trí trong collection của java là một trong vấn đề vô cùng cũ, nhưng mà thường trong các thắc mắc phỏng vấn về java ứng viên rất hấp dẫn bị hỏi về vấn đề này. Do vậy mình ao ước post này để giúp đỡ được một số ứng viên chẳng may bị hỏi đến lúc phỏng vấn

*
.Lớp Collections cung ứng các thủ tục tĩnh(static) cho việc sắp xếp các phần tử của collection. Chúng ta có thể sắp xếp các bộ phận của:

String objectsWrapper class objectsNgười sử dụng tự định nghĩa(User-defined) class objects

Phương thức của Collections class cần sử dụng cho việc sắp xếp các phần tử của List:

public void sort(List list): được thực hiện để thu xếp các phần tử của List. Các thành phần của List đề xuất là phong cách Comparable.

Bạn đang xem: Sắp xếp arraylist trong java

Note: String class với Wrapper classes implements Comparable interface bởi vậy cần mặc định là nó có thể sắp xếp được.

Ví dụ về bố trí List đựng các đối tượng String

import java.util.*;class TestSort1 public static void main(String args<>) ArrayList al = new ArrayList();al.add("Peter");al.add("John");al.add("Marry");al.add("Andrew");Collections.sort(al);Iterator itr = al.iterator();while (itr.hasNext()) System.out.println(itr.next());AndrewJohnMarryPeter

Ví dụ về thu xếp List chứa các đối tượng người tiêu dùng Wrapper

import java.util.*;class TestSort2 public static void main(String args<>) ArrayList al = new ArrayList();al.add(Integer.valueOf(201));al.add(Integer.valueOf(101));al.add(230);// nó sẽ được convert thành Integer.valueOf(230)Collections.sort(al);Iterator itr = al.iterator();while (itr.hasNext()) System.out.println(itr.next());101201230

Java Comparable interface

Java Comparable interface được sử dụng để chỉ ra thứ từ bỏ của các đối tượng người sử dụng Người cần sử dụng tự định nghĩa(User-defined). Interface này chỉ cất duy duy nhất 1 thủ tục tên là compareTo(Object). Nó cung cấp duy nhất 1 trình tự sắp xếp ví dụ như các bạn chỉ rất có thể sắp các thành phần của đối tượng người dùng Nhân viên theo "mã số" hoặc "tên" hoặc tuổi",...

Xem thêm: Cách Kết Nối Chuột Với Điện Thoại Android? Cách Kết Nối Chuột Bluetooth Với Điện Thoại

class Employee implements Comparable int id;String name;int age;Employee(int id, String name, int age) this.id = id;this.name = name;this.age = age;public int compareTo(Employee employee) if (age == employee.age)return 0;else if (age > employee.age)return 1;elsereturn -1;import java.util.*;class TestSort3 public static void main(String args<>) ArrayList al = new ArrayList();al.add(new Employee(101, "Peter", 23));al.add(new Employee(106, "Marry", 29));al.add(new Employee(105, "John", 21));//Sắp xếp các mục employeeCollections.sort(al);for (Employee st : al) System.out.println(st.id + " " + st.name + " " + st.age);105 John 21101 Peter 23106 Marry 29

Java Comparator interface

Java Comparator interface được thực hiện để đã cho thấy thứ từ của các đối tượng người sử dụng Người dùng tự định nghĩa(User-defined). Nó tư tưởng 2 thủ tục compare(Object obj1,Object obj2) với equals(Object element). Nó cung ứng nhiều trình tự sắp xếp ví dụ như bạn có thể sắp các bộ phận của đối tượng người sử dụng Nhân viên theo "mã số", "tên", tuổi",...

Xem thêm: Thực Đơn Cho Be Không Uống Sữa Ngoài ^^, Thực Đơn Cho Bé Không Uống Sữa Ngoài

public int compare(Object obj1,Object obj2): so sánh 2 object với nhaupublic void sort(List list, Comparator c): cách thức của Collections được áp dụng để bố trí các thành phần của list dựa trên Comparator.

class Employee int id;String name;int age;Employee(int id, String name, int age) this.id = id;this.name = name;this.age = age;import java.util.*;class AgeComparator implements Comparator public int compare(Employee s1, Employee s2) if (s1.age == s2.age)return 0;else if (s1.age > s2.age)return 1;elsereturn -1;import java.util.*;class NameComparator implements Comparator public int compare(Employee s1, Employee s2) return s1.name.compareTo(s2.name);import java.util.*;class TestSort4 public static void main(String args<>) ArrayList al = new ArrayList();al.add(new Employee(101, "Peter", 23));al.add(new Employee(106, "Marry", 27));al.add(new Employee(105, "John", 21));System.out.println("Sorting by Name...");Collections.sort(al, new NameComparator());for (Employee st : al) System.out.println(st.id + " " + st.name + " " + st.age);System.out.println("sorting by age...");Collections.sort(al, new AgeComparator());for (Employee st : al) System.out.println(st.id + " " + st.name + " " + st.age);Sorting by Name...105 John 21106 Marry 27101 Peter 23sorting by age...105 John 21101 Peter 23106 Marry 27

Comparable VS Comparator

Comparable và Comparator mọi là hầu hết interfaces được áp dụng để bố trí các thành phần trong collection. Tuy thế chúng bao gồm vài điểm lưu ý khác nhau như sau

ComparableComparator
Cung cấp duy nhất 1 trình tự sắp xếpCung cấp nhiều trình tự sắp xếp
Ảnh hưởng mang đến class nơi bắt đầu (Phải implement Comparable)Không ảnh hưởng đến class gốc
Cung cấp phương thức compareTo()Cung cấp thủ tục compare()
Nằm trong java.lang(Không cần phải import)Nằm vào java.util(Phải import)
Sắp xếp thực hiện Collections.sort(List)Sắp xếp thực hiện Collections.sort(List,Comparator)