List的排序方法:Collections.sort();
2015-08-20 13:11
363 查看
List是一个对象列表,当我们想根据list里面的对象中的某个属性排序时,怎么办呐?这时候就要用到Collections.sort方法
Collections.sort()方法有两个重载方法,一个是Collections.sort(List<T> list),一个是Collections.sort(List<T> list,Comparator<? super T> Comparator)
1.第一个方法,用于list中的对象本身就可以排序。比如List<String> strList = new ArrayList<String>();当我们将strList排序的时候,就可以直接用这个方法了,因为String本身是可以排序的,比如:
public class test {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("d");
list.add("b");
list.add("c");
list.add("e");
list.add("a");
Collections.sort(list);
for(String str:list){
System.out.println(str);
}
通过这个排序,就可以输出
a
b
c
d
e
结果。
2.当List存储的对象不能直接排序,比说说,我们创建了一个类是这样写的
class B{
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
当我们要对List<B> listB = new ArrayList<B>(); 就行排序的时候,就要用第二个方法了,代码实现为:
List<B> listB = new ArrayList<B>();
B b1 = new B();
b1.setName("zhou");
b1.setAge("45");
B b2 = new B();
b2.setName("li");
b2.setAge("38");
B b3 = new B();
b3.setName("jone");
b3.setAge("13");
B b4 = new B();
b4.setName("jomi");
b4.setAge("27");
listB.add(b1);
listB.add(b2);
listB.add(b3);
listB.add(b4);
Collections.sort(listB, new Comparator<B>() {
@Override
public int compare(B bf, B bs) {
return bf.getAge().compareTo(bs.getAge());
}
});
for(B b:listB){
System.out.println("name:"+b.getName()+" age:"+b.getAge());
}
会输出
name:zhou age:45
name:li age:38
name:jomi age:27
name:jone age:13
的结果。
在这里我们创建了四个B对象,加入到list中,Collections.sort(listB, new Comparator<B>() {})这一句意思是,要对List<B>就行排序,并new了一个比较器对象,ListB通过这个比较器对象中的实现方法(必须实现)compare中的逻辑就行排序。
public int compare(B bf, B bs){},这一句就是实现比较器对象中的比较方法。他定义了比较规则
return bs.getAge().compareTo(bf.getAge());这一句的意思是,用B对象中的哪个参数进行比较。我们拿第一个参数的年龄,跟第二个参数的年龄比较,如果第一个参数大于第二个参数,返回正数(比较器对象会通过返回的是正数,互换两个值的位置),这样最后就是升序排列了。如果想降序排列return bs.getAge().compareTo(bf.getAge());这样写就行了,也就是那第二个参数跟第一个参数进行比较。
Ok,今天就写到这里了,如有不同意见,欢迎提出讨论批评
Collections.sort()方法有两个重载方法,一个是Collections.sort(List<T> list),一个是Collections.sort(List<T> list,Comparator<? super T> Comparator)
1.第一个方法,用于list中的对象本身就可以排序。比如List<String> strList = new ArrayList<String>();当我们将strList排序的时候,就可以直接用这个方法了,因为String本身是可以排序的,比如:
public class test {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("d");
list.add("b");
list.add("c");
list.add("e");
list.add("a");
Collections.sort(list);
for(String str:list){
System.out.println(str);
}
通过这个排序,就可以输出
a
b
c
d
e
结果。
2.当List存储的对象不能直接排序,比说说,我们创建了一个类是这样写的
class B{
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
当我们要对List<B> listB = new ArrayList<B>(); 就行排序的时候,就要用第二个方法了,代码实现为:
List<B> listB = new ArrayList<B>();
B b1 = new B();
b1.setName("zhou");
b1.setAge("45");
B b2 = new B();
b2.setName("li");
b2.setAge("38");
B b3 = new B();
b3.setName("jone");
b3.setAge("13");
B b4 = new B();
b4.setName("jomi");
b4.setAge("27");
listB.add(b1);
listB.add(b2);
listB.add(b3);
listB.add(b4);
Collections.sort(listB, new Comparator<B>() {
@Override
public int compare(B bf, B bs) {
return bf.getAge().compareTo(bs.getAge());
}
});
for(B b:listB){
System.out.println("name:"+b.getName()+" age:"+b.getAge());
}
会输出
name:zhou age:45
name:li age:38
name:jomi age:27
name:jone age:13
的结果。
在这里我们创建了四个B对象,加入到list中,Collections.sort(listB, new Comparator<B>() {})这一句意思是,要对List<B>就行排序,并new了一个比较器对象,ListB通过这个比较器对象中的实现方法(必须实现)compare中的逻辑就行排序。
public int compare(B bf, B bs){},这一句就是实现比较器对象中的比较方法。他定义了比较规则
return bs.getAge().compareTo(bf.getAge());这一句的意思是,用B对象中的哪个参数进行比较。我们拿第一个参数的年龄,跟第二个参数的年龄比较,如果第一个参数大于第二个参数,返回正数(比较器对象会通过返回的是正数,互换两个值的位置),这样最后就是升序排列了。如果想降序排列return bs.getAge().compareTo(bf.getAge());这样写就行了,也就是那第二个参数跟第一个参数进行比较。
Ok,今天就写到这里了,如有不同意见,欢迎提出讨论批评
相关文章推荐
- 黑马程序员---学习笔记16:OC基础(3)
- 黑马程序员---学习笔记15:OC基础(2)
- jQuery插件开发
- HDU5410 CRB and His Birthday(完全背包)
- redis投票计数
- The Unique MST
- ompl 安装中的libccd问题
- 黑马程序员---学习笔记14:OC基础(1)
- 黑马程序员---学习笔记13:宏定义
- Transitions, Transforms和Animation使用简介
- Hibernate学习之延迟加载
- 大学快混完了~
- WPF C1FlexGrid 扩展、带表头ID,并且有鼠标移到行高亮
- Android笔记(四)Menu菜单
- ural 1119. Metro DFS
- javascript之url转义escape()、encodeURI()和encodeURIComponent()
- Android-Volley网络通信框架(自定义Request 请求:实现 GsonRequest)
- 黑马程序员---学习笔记12:typedef关键字
- 大约SQL/NoSQL数据库搜索/思考查询
- ios,android使用HTML5开发问题汇总