List的排序方法:Collections.sort();

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,今天就写到这里了,如有不同意见,欢迎提出讨论批评

猜你喜欢

转载自blog.csdn.net/jixinhuluwa/article/details/47806391