Khi làm việc với lượng lớn dữ liệu thì nhu cầu sắp xếp để tìm kiếm càng lớn, do đó chúng ta thấy tính năng sắp xếp có ở hầu hết các ứng dụng. Nhưng nếu bạn tự code thì sẽ mất khá nhiều thời gian và công sức. Ở bài viết này, tôi sẽ hướng dẫn bạn một cách đơn giản để sắp xếp dữ liệu trong Java.

Trong bài viết này, tôi sẽ sử dụng java.util.Collections.sort để sắp xếp các đối tượng trong Collection theo thứ tự tăng dần. Để sắp xếp được, thì trước tiên các đối tượng đó phải implement interface java.lang.Comparable với phương thức compareTo(Object obj2).

Giả sử ta cần so sánh đối tượng obj1 với obj2 thì phương thức này phải trả về kết quả như sau:

  • 0 Nếu như obj1 và obj2 bằng nhau
  • Số dương Nếu obj1 lớn hơn obj2
  • Số âm Nếu obj1 nhỏ hơn obj2

Ví dụ 1: Sắp xếp một danh sách chuỗi theo thứ tự tăng dần

Đây là code:
[sourcecode language=”java”]
public static void main(String[] args) {
//Khởi tạo một đối tượng List chứa tên là các chuỗi
List<String> names = new LinkedList<String>();

//Khởi tạo dữ liệu
names.add("Tạp");
names.add("Chí");
names.add("Lập");
names.add("Trình");

//Sắp xếp
java.util.Collections.sort(names);

//Hiển thị xâu sau khi sắp xếp
for (String name : names) {
System.out.println(name);
}
}
[/sourcecode]

Và đây là kết quả
Chí
Lập
Trình
Tạp

Ví dụ 2: sắp xếp danh sách sản phẩm theo tứ tự giá tăng dần

Đầu tiên, ta viết class Product để mô tả sản phẩm.

[sourcecode language=”java”]
public class Product{

private int code;
private String name;
private double price;

public Product(int code, String name, double price) {
this.code = code;
this.name = name;
this.price = price;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getName() {
return name;
}

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

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

@Override
public String toString() {
return "Product{ " + code + ", " + name + ", " + price + ‘}’;
}
}
[/sourcecode]

Muốn sắp xếp được thì ta implement phương thức compareTo() của interface java.util.Comparable. Ví dụ ta so sánh hai đối tượng product1 với product2 thì phương thức compareTo(Product product2) trả về:

  • 0 nếu product1 và product2 có giá bằng nhau.
  • Số dương nếu product1 có giá lớn hơn giá của product2.
  • Số âm nếu product1 có giá nhỏ hơn giá của product2.

[sourcecode language=”java”]
public class Product implements Comparable<Product> {
//….
@Override
public int compareTo(Product o) {
//this case we compare product by price

//this product and o are the same
if (this.price == o.price) {
return 0;
}
//this product is greater than o
if (this.price > o.price) {
return 1;
}
//this product is less than o
return -1;
}
}
[/sourcecode]

Và mã để sắp xếp danh sách Product

[sourcecode language=”java”]
public static void main(String[] args) {
//Instantiate an object of list product
List<Product> products = new LinkedList<Product>();

//Prepare mock data to test
products.add(new Product(1, "TV", 300));
products.add(new Product(2, "Iphone", 600));
products.add(new Product(3, "Sony Vaio E", 200));
products.add(new Product(4, "Asus E", 800));

//Sort list
java.util.Collections.sort(products);

//print sorted list
for (Product p : products) {
System.out.println(p);
}
}
[/sourcecode]
Kết quả:
Product{code=3, name=Sony Vaio E, price=200.0}
Product{code=1, name=TV, price=300.0}
Product{code=2, name=Iphone, price=600.0}
Product{code=4, name=Asus E, price=800.0}

Ví dụ này mới chỉ hướng dẫn bạn sắp xếp một List, nhưng bạn hoàn toàn có thể sắp xếp bất kỳ đối tượng Collection nào. Nếu bạn muốn sắp xếp một mảng thì có thể dùng phương thức sort của java.util.Arrays.

Kết luận

Như vậy, bạn đã hoàn thành phần sắp xếp một cách đơn giản và dễ dàng. Nhưng đây mới chỉ là sắp xếp theo một tiêu chí, vậy nếu ta muốn sắp xếp theo nhiều tiêu chí (ví dụ: sắp xếp theo tên và giá) thì làm thế nào? Tôi sẽ giúp bạn trả lời câu hỏi này ở bài viết sau.

Source Code