ArrayList实现根据某属性大小相间排序

ArrayList实现根据某属性大小相间排序Posted on

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个测试Userfor (int i = 0; i < 3; i++) {list.add(new User(“user”+i,Math.random()*100,i));}//对User按照age降序排序Collections.sort(list, new Comparator<User>() {@Overridepublic 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;}@Overridepublic 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>() {@Overridepublic int compare(User o1, User o2) {return o1.age>o1.age?-1:1;}});//在这里添加DisorderListUtil.sort(list);System.out.println(list.toString());

  

但是至少可以为自己的荷包省钱可以支些招,这点还是很现实的。

ArrayList实现根据某属性大小相间排序

相关文章:

你感兴趣的文章:

标签云: