现在的位置: 首页 > 综合 > 正文

List/ArrayList 排序—-coding

2014年02月03日 ⁄ 综合 ⁄ 共 2160字 ⁄ 字号 评论关闭

1、当列表中保存的为字符串或者为数字型的,可以用:

Collections.sort(List<T>)

public static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何
e1e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。

此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

指定列表必须是可修改的,但不必是大小可调整的。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图对适当位置上的链接列表进行排序而产生的 n2 log(n) 性能。

参数:
list - 要排序的列表。
抛出:
ClassCastException - 如果列表包含不可相互比较的 的元素(例如,字符串和整数)。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持
set 操作。

 

2、当列表中保存的为自定义的javaBean,希望对对象列表按照某个属性进行升序、降序排序,可以用:

Collections.sort(List<T> list, 
Comparator<? super T> c)

根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须是使用指定比较器可相互比较的(也就是说,对于列表中的任何 e1
e2 元素,c.compare(e1, e2) 不得抛出 ClassCastException)。

此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图对适当位置上的链接列表进行排序而产生的 n2 log(n) 性能。

参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用的元素的自然顺序
抛出:
ClassCastException - 如果列表中包含使用指定的比较器不可相互比较的 的元素。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持
set 操作。

 

           Comparator接口的实现:

package com.linkage.bi.powershow.util;

import java.util.Comparator;

import com.mongodb.BasicDBObject;

public class SortUtil implements Comparator<BasicDBObject> {

	private final static int UP = 1;    //升序

	private final static int DOWM = -1; //降序
	
	private int sortVal;                //选择的排序方式
	
	private String sortKey = "";        //按某字段进行排序

	public SortUtil() { 

	}
	
	public SortUtil(int sortVal, String sortKey) { 
		this.sortVal = sortVal;
		this.sortKey = sortKey;
	}
	
	@Override
	public int compare(BasicDBObject o1, BasicDBObject o2) {
		if(sortVal == SortUtil.UP)
		{
			return sortUp(o1, o2);
		}
		else if(sortVal == SortUtil.DOWM)
		{
			return sortDown(o1, o2);
		}
		return 0;
	}
	
	//升序
	private int sortUp(BasicDBObject o1, BasicDBObject o2) { 
		String val1 = o1.getString(sortKey);
		String val2 = o2.getString(sortKey);
		if (val1.compareTo(val2) < 0) { 
			return -1; 
		} else if (val1.compareTo(val2) > 0) { 
			return 1; 
		} else { 
			return 0; 
		} 
	}
	
	//降序
	private int sortDown(BasicDBObject o1, BasicDBObject o2) { 
		String val1 = o1.getString(sortKey);
		String val2 = o2.getString(sortKey);
		if (val1.compareTo(val2) > 0) { 
			return -1; 
		} else if (val1.compareTo(val2) < 0) { 
			return 1; 
		} else { 
			return 0; 
		} 
	}
}

 

 

抱歉!评论已关闭.