一,List<Integer>的排序
示例代碼:
List<Integer> list = new ArrayList<Integer>();
list.add(6);
list.add(8);
list.add(4);
list.add(5);
//正序排(從小到大)
Collections.sort(list);
System.out.println(list.toString());
//倒敘排 (注意:倒敘的話就是按照添加的順序進行倒敘! 可查看自測結果,字符串和數字都是如此)
Collections.reverse(list);
System.out.println(list.toString());
(自測結果)
運行結果:
正序排(從小到大):[4, 5, 6, 8]
倒敘排(從大到小):[8, 6, 5, 4]
二,對類中單個字段進行排序
1.類實現Comparable接口的compareTo方法
定義product類:
public class Product implements Comparable<Product>{
/**
* ID
*/
private Integer id;
/**
* 數量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, Integer num) {
super();
this.id = id;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
@Override
public int compareTo(Product o) {
if(this.num>=o.getNum()) {
return 1;
}
return -1;
}
}
測試代碼:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, 50));
productList.add(new Product(1, 30));
productList.add(new Product(1, 10));
productList.add(new Product(1, 55));
productList.add(new Product(1, 70));
//按照數量從小到大排序
productList.sort(Comparator.naturalOrder());
System.out.println("按照數量從小到大排序:");
for (Product product : productList) {
System.out.println(product.toString());
}
//按照數量從大到小排序
productList.sort(Comparator.reverseOrder());
System.out.println("按照數量從大到小排序:");
for (Product product : productList) {
System.out.println(product.toString());
}
運行結果:
按照數量從小到大排序:
Product [id=1, num=10]
Product [id=1, num=30]
Product [id=1, num=50]
Product [id=1, num=55]
Product [id=1, num=70]
按照數量從大到小排序:
Product [id=1, num=70]
Product [id=1, num=55]
Product [id=1, num=50]
Product [id=1, num=30]
Product [id=1, num=10]
2.使用Comparator類進行排序
定義Product類:
public class Product{
/**
* ID
*/
private Integer id;
/**
* 數量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, Integer num) {
super();
this.id = id;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
}
測試代碼:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, 50));
productList.add(new Product(1, 30));
productList.add(new Product(1, 10));
productList.add(new Product(1, 55));
productList.add(new Product(1, 70));
//按照數量從小到大排序
Collections.sort(productList, new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
});
System.out.println("按照數量從小到大排序:");
for (Product product : productList) {
System.out.println(product.toString());
}
//按照數量從大到小排序
Collections.sort(productList, Collections.reverseOrder(new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
}));
System.out.println("按照數量從大到小排序:");
for (Product product : productList) {
System.out.println(product.toString());
}
運行結果:
按照數量從小到大排序:
Product [id=1, num=10]
Product [id=1, num=30]
Product [id=1, num=50]
Product [id=1, num=55]
Product [id=1, num=70]
按照數量從大到小排序:
Product [id=1, num=70]
Product [id=1, num=55]
Product [id=1, num=50]
Product [id=1, num=30]
Product [id=1, num=10]
三,對類中多個字段進行排序
定義Product類:
import java.math.BigDecimal;
public class Product{
/**
* ID
*/
private Integer id;
/**
* 價格
*/
private BigDecimal price;
/**
* 數量
*/
private Integer num;
public Product() {
super();
}
public Product(Integer id, BigDecimal price, Integer num) {
super();
this.id = id;
this.price = price;
this.num = num;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Product [id=");
builder.append(id);
builder.append(", price=");
builder.append(price);
builder.append(", num=");
builder.append(num);
builder.append("]");
return builder.toString();
}
}
測試代碼:
List<Product> productList = new ArrayList<Product>();
productList.add(new Product(1, new BigDecimal(60), 50));
productList.add(new Product(2, new BigDecimal(70), 30));
productList.add(new Product(3, new BigDecimal(80), 10));
productList.add(new Product(4, new BigDecimal(75), 55));
productList.add(new Product(5, new BigDecimal(30), 70));
productList.add(new Product(5, new BigDecimal(75), 60));
//按照價格從小到大排序,如果價格相等,則按照剩余數量從小到大排序
Collections.sort(productList,new Comparator<Product>() {
@Override
public int compare(Product o1, Product o2) {
if(o1.getPrice().compareTo(o2.getPrice())==0) {
if(o1.getNum()>=o2.getNum()) {
return 1;
}
return -1;
}
return o1.getPrice().compareTo(o2.getPrice());
}
});
for (Product product : productList) {
System.out.println(product.toString());
}
運行結果:
Product [id=5, price=30, num=70]
Product [id=1, price=60, num=50]
Product [id=2, price=70, num=30]
Product [id=4, price=75, num=55]
Product [id=5, price=75, num=60]
Product [id=3, price=80, num=10]
---------------------