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


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;
		}
	}

}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值