欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础之集合框架--Collections工具类中的sort()方法

程序员文章站 2024-01-14 09:42:22
...


package newFeatures8;

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



/* Collections.sort(List<T> list);
 * 进行了该泛型方法进行了泛型限定:存入list集合里的元素必须实现Comparable接口
 * 而Comparable接口也进行了泛型限定:必须是T类型或是T的父类型,
 * 比如T是Student的话,写Comparable<Person> 更具有扩展性(Student extends Person)
 * public static <T extends Comparable<? super T>> void sort(List<T> list)
 */



public class CollectionsDemo {

	public static void main(String[] args) {
		listSortDemo();
	}
	/**
	 * @author ljh
	 * @param nothing
	 * @return void
	 * @since 1.2
	 * @description 因为在Java API中 Set 集合要排序有TreeSet,Map要排序有TreeMap
	 * 由于List集合不具备排序行为所以要用到集合框架的工具类,Collections.sort(List<T> list),
	 * 爽到不行,这回你知道为什么sort方法的参数只是List集合了吧!
	 */
	public static void listSortDemo(){
		//
		List<String> list=new ArrayList<>();
		list.add("abcd");//String类本身就是实现了Comparable接口
		list.add("kkkkk");
		list.add("z");
		list.add("zz");
		list.add("qq");
		list.add("qq");
		//1.8之前对list集合进行排序的做法
		/*
		System.out.println("排序前:"+list);
		//Collections.sort(list);
		Collections.sort(list,new strLenCompartor())
		System.out.println("排序后:"+list);
		*/
		
		/*
		 * 1.8对list 集合新增的方法:
		 * (1:)default void sort(Comparator<? super E> c)
		 * (2:)default void forEach(Consumer<? super T> action)
		 * (3:)default Stream<E> parallelStream()
		 * (4:)default void replaceAll(UnaryOperator<E> operator)
		 * (5:)default boolean removeIf(Predicate<? super E> filter)
		 * (6:)default Spliterator<E> spliterator()
		 * (7:)default Stream<E> stream()
		 */
		//1.8之后对list集合进行排序的做法
		//list.sort(null);//传入null表示按照自然排序
		list.sort(new strLenCompartor());
		System.out.println("排序后:"+list);
		/*
		 * 现在需求改了,要按照字符串的长度进行排序
		 * 由于实现Comparable接口只是让实现类型具自然有比较行为
		 * 这时只需要实现Compartor接口就可以自定义比较行为
		 */
		
	}
	/**
	 * 
	 * @author ljh
	 * @description 静态内部类</br>
	 * 按照字符串的长度进行排序,如果字符串长度相同按按照名称排序
	 */
	static class strLenCompartor implements Comparator<String>{
		@Override
		public int compare(String s1, String s2) {
			 int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
			 //当主要条件相同一定要按照次要条件排序
			 if (num==0) {
				return s1.compareTo(s2);
			}
			return num;
		}
	}

}