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

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 list=new ArrayList();

//向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() {

@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降序排序了。

但是有些时候我们可能需要按照某属性进行大小相间排序,比如说饼状图旁边会有相关的文字说明,在某些极端的情况下可能会出现说明文字重叠的现象,这个时候如果按照一个大的一个小的,大小交叉来显示反而会能够正常显示。

9e743af4d864a6d10fdc54ce2cdc427f.png

7a8c41934c9b27e17937b24e1785fe56.png

新建一个工具类来对已经进行排序的List进行大小相间排序

class DisorderListUtil {

public static void sort(List 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() {

@Overridepublic intcompare(User o1, User o2) {return o1.age>o1.age?-1:1;

}

});//在这里添加

DisorderListUtil.sort(list);

System.out.println(list.toString());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值