您的位置:首页 > 编程语言 > Java开发

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

2017-09-15 23:33 676 查看
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;
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐