一、Collections集合排序:
Collections的集合类包含了排序方法 void sort(List<T> list)但是只能对List进行排序
List
ArrayList是按照添加顺序存储的
LinkedList也是按照添加顺序存储的
①对List进行正常排序
List<String> list = new ArrayList<String>();
list.add("12");
list.add("4");
list.add("23");
//Collections.sort(list);
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int x1 = Integer.parseInt(o1);
int x2 = Integer.parseInt(o2);
return x1>x2?1:(x1==x2?0:-1);
}
});
for(String info : list){
System.out.println(info);
}
String类底层实现了Comparable接口,所以默认sort()排序是升序排列的。
如果排序规则不满足需求,需要使用sort(List<T> list, Comparator<? super T> c)构造器自己来实现排序规则(如上代码)
②List<Object>泛型为自定义对象时
可以通过上面方式外部实现排序接口Comparator
也可以在自定义对象中事先内部排序接口Comparable
package com.sunyuqian.test;
public class Person implements Comparable<Person>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person o) {
return (o.getAge()<this.age)?1:((o.getAge()==this.age)?0:-1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
//通过实体类实现comparable接口来实现内部排序
Person a = new Person("张三",23);
Person b = new Person("王五",43);
Person c = new Person("李四",12);
List<Person> plist = new ArrayList<Person>();
plist.add(a);
plist.add(b);
plist.add(c);
Collections.sort(plist);
for(Person info : plist){
System.out.println(info.getName()+"--------"+info.getAge());
}
set
HashSet是无序的
LinkedHashSet按照添加顺序访问
TreeSet是可以对set集合进行自定义排序的
//Set<String>的泛型是基本类型时,默认实现了Comparable接口
//默认是按升序排列的
Set<String> treeSet = new TreeSet<String>();
treeSet.add("18");
treeSet.add("4");
treeSet.add("2");
treeSet.add("16");
treeSet.add("18");
treeSet.add("23");
for(String info : treeSet){
System.out.println(info);
}
//如果不想按升序进行排序,就需要使用TreeSet(Comparator<? super E> comparator)的构造器,自己重新编写排序规则
//set降序输出
Set<String> treeSet = new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
treeSet.add("18");
treeSet.add("4");
treeSet.add("2");
treeSet.add("16");
treeSet.add("18");
treeSet.add("23");
for(String info : treeSet){
System.out.println(info);
}
//如何泛型不是基本数据类型的包装类,而是自定义的对象,需要自定义的对象实现Comparable接口或者TreeSet实现外部接口
TreeSet是可以实现Comparator排序接口进行自定义排序规则的。如果不实现该接口默认是按泛型的本身自带的规则进行排序的。
二、Map集合排序:
HashMap无序的
LinkedHashMap按照添加顺序存储的
TreeMap可以实现外部排序接口,默认升序
如果不使用TreeMap需要对HashMap进行排序,可以把Map放到List中使用Collections工具类对HashMap进行key排序或value排序
Map<String,String> map = new HashMap<String, String>();
map.put("1", "ccccccccc");
map.put("4", "aaaaaaaaa");
map.put("2", "ddddddddd");
map.put("3", "bbbbbbbbb");
List<Map.Entry<String,String>> mapList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
Collections.sort(mapList, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
for(Map.Entry<String, String> info : mapList){
System.out.println(info.getKey()+"--------"+info.getValue());
}
三、Comparable与Comparator区别
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
分享到:
相关推荐
NULL 博文链接:https://xuedong.iteye.com/blog/1147254
主要介绍了JAVA对list集合进行排序Collections.sort(),需要的朋友可以参考下
主要介绍了Java Arrays.sort和Collections.sort排序实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Java Collections.sort()实现List排序的默认方法和自定义方法,需要的朋友可以参考下
Java Generics and Collections.pdf
本篇文章主要介绍了java中Collections.sort排序函数用法详解,非常具有实用价值,需要的朋友可以参考下。
主要介绍了java中Collections.sort排序详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文通过两种方法给大家介绍java集合中的Collections.sort方法对list排序,第一种方式是list中的对象实现Comparable接口,第二种方法是根据Collections.sort重载方法实现,对collections.sort方法感兴趣的朋友一起...
Comparator是个接口,可重写compare()及equals()这两个方法,接下来通过本文给大家介绍Java中Collections.sort排序,需要的的朋友参考下吧
Java Generics and Collections.2006.pdf
Java.Generics.and.Collections.Oct.2006.pdf 完美清晰正版
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
Java Generics and Collections.chm Java语言基础部分 必学知识。
[Java泛型和集合].(Java.Generics.and.Collections).Maurice.Naftalin&Philip.Wadler.文字版.
commons-collections-20040616.jar, ...commons-collections.jar, commons-collections3-3.2.1.jar, commons-collections4-4.1-javadoc.jar, commons-collections4-4.1-src.zip, commons-collections4-4.1.jar
主要介绍了Java Collections.sort()排序代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了详解java Collections.sort的两种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java Collections.pdf 作者john zukowski