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

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

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

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

新建一个工具类来对已经进行排序的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());

 

  

你可能感兴趣的:(ArrayList)