自然排序与比较排序

1.自然排序

class ComparableTest implements Comparable<ComparableTest>{//实现自然排序的类
	private String name;
	private Integer age;

	@Override
	public int compareTo(ComparableTest o) {//重写自然排序
		// TODO Auto-generated method stub
		if(this.age<o.age) {
			return -1;
		}
		return 1;
	}

	public ComparableTest() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ComparableTest(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "ComparableTest [name=" + name + ", age=" + age + "]";
	}
	
}
			//main方法中的代码。
			ComparableTest c1 = new ComparableTest("ch", 20);
			ComparableTest c2 = new ComparableTest("ch1", 22);
			ComparableTest c3 = new ComparableTest("ch2", 21);
			ArrayList<ComparableTest> list = new ArrayList<ComparableTest>();
			list.add(c1);
			list.add(c2);
			list.add(c3);
			//Collections.sort()方法调用后,jvm根据继承了Comparable<T>的对象内部的重写自然排序的对象进行排序
			Collections.sort(list);
			for (ComparableTest comparableTest : list) {
				System.out.println(comparableTest);
			}
			
		}
//排序后的结构
ComparableTest [name=ch, age=20]
ComparableTest [name=ch2, age=21]
ComparableTest [name=ch1, age=22]

2.比较器排序

			Integer[] a = {1,3,2,4};
			Arrays.sort(a);
			System.out.println(Arrays.toString(a));//没用比较器前的默认排序为由小到大
			Arrays.sort(a,new Comparator<Integer>() {//匿名内部类实现比较器

				@Override
				public int compare(Integer o1, Integer o2) {//o1为后进来的值,o2为被比较的值
					// TODO Auto-generated method stub
					if(o1>o2)
						return -1; 
					else
						return 1;
				}
				
			});
			System.out.println("-------------"+"自定义排序后的结果");
			System.out.println(Arrays.toString(a));
[1, 2, 3, 4]
-------------自定义排序后的结果
[4, 3, 2, 1]

ps:比较器排序的优先级高于自然排序的优先级


版权声明:本文为qq_45086286原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。