`

java 排序

    博客分类:
  • java
阅读更多
1 对象自然排序
第一种方式 排序对象必须实现Comparable接口
import java.util.Arrays;

public class ComparableTest {

	static class Comp implements Comparable<Comp> {
		private int num;

		public Comp() {
		}

		public Comp(int num) {
			this.num = num;
		}

		public int getNum() {
			return num;
		}

		public void setNum(int num) {
			this.num = num;
		}

		public int compareTo(Comp anotherComp) {
			return getNum() - anotherComp.getNum();
		}

		@Override
		public String toString() {
			return "Comp [num=" + num + "]";
		}
	}

	public static <E> void paixu(E[] array) {
		for (E e : array) {
			System.out.println(e.toString());
		}
	}

	public static void main(String[] args) {
		Comp[] comps = new Comp[] { new Comp(12), new Comp(2), new Comp(79),
				new Comp(11) };
		Arrays.sort(comps);
		paixu(comps);
	}
}


第二种方式 提供一个比较器
import java.util.Arrays;
import java.util.Comparator;


public class ComparatorTest {

	static class Comp {
		private int num;

		public Comp() {
		}

		public Comp(int num) {
			this.num = num;
		}

		public int getNum() {
			return num;
		}

		public void setNum(int num) {
			this.num = num;
		}

		@Override
		public String toString() {
			return "Comp [num=" + num + "]";
		}
	}
	
	public static <E> void paixu(E[] array) {
		for (E e : array) {
			System.out.println(e.toString());
		}
	}

	public static void main(String[] args) {
		Comp[] comps = new Comp[] { new Comp(12), new Comp(2), new Comp(79),
				new Comp(11) };
		Arrays.sort(comps,new Comparator<Comp>() {
			public int compare(Comp o1, Comp o2) {
				return o1.getNum()-o2.getNum();
			}
		});
		paixu(comps);
	}

}


Arrays.sort(Object[] a)使用的是合并排序算法
Arrays.sort(int[] a)...基本类型的 使用的是快速排序算法

2 List排序
对象实现Comparable或者 提供比较器
下面就举提供比较器的例子
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.google.common.collect.Lists;

public class CollectionComparableTest {
	static class Comp {
		private int num;

		public Comp() {
		}

		public Comp(int num) {
			this.num = num;
		}

		public int getNum() {
			return num;
		}

		public void setNum(int num) {
			this.num = num;
		}

		@Override
		public String toString() {
			return "Comp [num=" + num + "]";
		}
	}

	private static <T> void paixu(List<T> comparables) {
		for (T t : comparables) {
			System.out.println(t.toString());
		}
	}

	public static void main(String[] args) {
		List<Comp> comps = Lists.newArrayList();
		comps.add(new Comp(11));
		comps.add(new Comp(1));
		comps.add(new Comp(22));
		comps.add(new Comp(56));
		comps.add(new Comp(3));
		Collections.sort(comps, new Comparator<Comp>() {
			public int compare(Comp o1, Comp o2) {
				return o1.getNum() - o2.getNum();
			}
		});
		paixu(comps);
	}

}


用的也是合并排序算法

大于内存的排序
http://yangyiqian.iteye.com/blog/743411
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics