Collections.sort()排序原理之字符串

package review;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PersonTest {
	/**
	 * 基本数据类型Comparable或者Comparator, 使用Collections.sort()进行排序的原理
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// 存字符串
		List<String> list1 = new ArrayList<>();
		list1.add("ba");
		list1.add("ca");
		list1.add("aa");
		System.out.println("原来的顺序            :" + list1);
		mySort1(list1);
		System.out.println("字母从高到低排序:" + list1);
		mySort2(list1, new MyComparator());
		System.out.println("字母从低到高排序:" + list1);
	}

	// 声明类型T,List的类型是T,T实现了Comparable接口,而且接口操作的对象可以是T类型或者是T的父类类型。
	// 注意:Comparable对应c.compareTo()方法
	private static <T extends Comparable<? super T>> void mySort1(List<T> list1) {
		for (int i = 0; i < list1.size() - 1; i++) {
			for (int j = i + 1; j < list1.size(); j++) {
				if (list1.get(i).compareTo(list1.get(j)) < 0) {
					Collections.swap(list1, i, j);
				}
			}
		}
	}

	// 声明类型T,List的类型是T,Comparator是接口类型,接受传过来的子类对象,接口操作的类型是T及其父类类型
	// 注意:Comparator对应cp.compare(a,b)方法
	private static <T> void mySort2(List<T> list1, Comparator<? super T> cp) {
		for (int i = 0; i < list1.size() - 1; i++) {
			for (int j = i + 1; j < list1.size(); j++) {
				if (cp.compare(list1.get(i), list1.get(j)) > 0) {
					Collections.swap(list1, i, j);
				}
			}
		}
	}
}

// Comparator的子类,操作的类型应该是父类(具体类型),可以接受子类类型
// 覆盖接口Comparator中的compare方法
class MyComparator implements Comparator<String> {
	@Override
	public int compare(String o1, String o2) {
		return o1.compareTo(o2);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_32182637/article/details/79162418
今日推荐