Java本身提供了一個集合的幫助類java.util.Collections,提供了對集合操作一些方法,借助於此類提供的sort方法可以實現對List進行排序操作
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class CollectionsTest { public static void main(String[] args) { List<User> list=new ArrayList<User>(); //向List中添加3個測試User for (int i = 0; i < 3; i++) { list.add(new User("user"+i,Math.random()*100,i)); } //對User按照age降序排序 Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.age>o1.age?-1:1; } }); System.out.println(list.toString()); } } class User{ public String name; public double weight; public int age; public User(String name, double weight, int age) { super(); this.name = name; this.weight = weight; this.age = age; } @Override public String toString() { return "User [name=" + name + ", weight=" + weight + ", age=" + age + "]"; } }
運行結果如下:
[User [name=user2, weight=58.258765180626824, age=2], User [name=user1, weight=5.67998519085704, age=1], User [name=user0, weight=45.10058689997257, age=0]]
可以看到成功的按照age降序排序了。
但是有些時候我們可能需要按照某屬性進行大小相間排序,比如說餅狀圖旁邊會有相關的文字說明,在某些極端的情況下可能會出現說明文字重疊的現象,這個時候如果按照一個大的一個小的,大小交叉來顯示反而會能夠正常顯示。
新建一個工具類來對已經進行排序的List進行大小相間排序
class DisorderListUtil { public static <T> void sort(List<T> list){ Object[] a = list.toArray(); int n=a.length; for (int i = 1; i < n/2+1; i+=2) { T l=list.get(i); list.set(i, list.get(n-i-1)); list.set(n-i-1, l); } } }
這樣就能通過修改引用地址對List進行大小相間排序。
Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.age>o1.age?-1:1; } }); //在這里添加 DisorderListUtil.sort(list); System.out.println(list.toString());