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

但是有些時候我們可能需要按照某屬性進行大小相間排序,比如說餅狀圖旁邊會有相關的文字說明,在某些極端的情況下可能會出現說明文字重疊的現象,這個時候如果按照一個大的一個小的,大小交叉來顯示反而會能夠正常顯示。

新建一個工具類來對已經進行排序的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());

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM