Java中Collections类的排序sort函数两种用法 (转http://viver120.blog.163.com/blog/static/60072482013010111228695/)

java中的Colletions类主要实现列表List的排序功能。根据函数参数的传递,具体的排序可以分为 :

1.  自然排序(natural ordering)。

函数原型:sort(List<T> list)
说明:参数是要参与排序列表的List对象                                                               
实例说明:参与排序的列表的元素Student必须实现Comparable接口的
public int compareTo(Object o) 方法,在里面写对比的原则。
然后调用Colletions.sort(排序对象的列表)    
请看如下示例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
class ArrayListTest{
public static void printElements(Collection c){
  Iterator it = c.iterator();
  while(it.hasNext()){
  System.out.println(it.next());
}
}
public static void main(String[] args){
  ArrayList<Student> al = new ArrayList<Student>();
  al.add(new Student(2,"aora"));
  al.add(new Student(1,"longyu"));
  al.add(new Student(3,"goso"));
  Collections.sort(al);
  printElements(al);
}
}
class Student implements Comparable{
  int num;
  String name;
  Student(int num,String name){
  this.num = num;
  this.name = name;
}
  public int compareTo(Object o) {
    Student s = (Student)o;
    return num > s.num ? 1 : (num == s.num ? 0 : -1);
  };
  public String toString(){
    return "num = " + this.num + ",name = " + this.name;
  }
}

2.  实现比较器(Comparator)接口。

函数原型:sort(List<T> list, Comparator<? super T> c)
说明:第一个参数同左,第二个参数是构建对比规则的对比器Comparator。
实例说明(如下):在参与排序的列表的元素Student中写一个内部类作为
Student的对比器,这个对比器要实现Comparator接口的public int compare(Object o1,
Object o2)方法,然后调用Colletions.sort(排序对象的列表,对比器)

请看如下示例:

 1 import java.util.ArrayList;
 2 import java.util.Collection;
 3 import java.util.Collections;
 4 import java.util.Iterator;
 5 import java.util.Comparator;
 6 class ArrayListTest{
 7   public static void printElements(Collection c){
 8     Iterator it = c.iterator();
 9     while(it.hasNext()){
10       System.out.println(it.next());
11     }
12   }
13   public static void main(String[] args){
14     ArrayList<Student> al = new ArrayList<Student>();
15     al.add(new Student(2,"qingan"));
16     al.add(new Student(1,"longyu"));
17     al.add(new Student(3,"goso"));
18     al.add(new Student(2,"aora"));
19     Collections.sort(al,new Student.studentComparator());
20     printElements(al);
21    }
22 }
23 class Student{
24   int num;
25   String name;
26   Student(int num,String name){
27     this.num = num;
28     this.name = name;
29   }
30   static class studentComparator implements Comparator{
31     public int compare(Object o1,Object o2){
32       Student s1 = (Student)o1;
33       Student s2 = (Student)o2;
34       int result = s1.num > s2.num ? 1 : (s1.num == s2.num ? 0 : -1);
35                         // 注意:此处在对比num相同时,再按照name的首字母比较。
36       if(result == 0){
37         result = s1.name.compareTo(s2.name);
38       }
39       return result;
40     }
41 }
42   public String toString(){
43     return "num = " + this.num + ",name = " + this.name;
44   }
45 }
时间: 2024-08-24 09:51:01

Java中Collections类的排序sort函数两种用法 (转http://viver120.blog.163.com/blog/static/60072482013010111228695/)的相关文章

Java 中对类进行排序的方法(转)

JAVA中的比较器接口Comparable用于数组对象的排序,要使用此功能,必须让类继承自Comparable接口,重写compareTo(Object obj)方法. import java.util.*; class Person implements Comparable{ private String name; private int age; private float score; public Person(String name,int age,float score){   

java基础——Collections.sort的两种用法

Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); } public static <T> void sort(List<T> list, Comparator<? super T> c) {

Collections.sort的两种用法 转

Java代码   /** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortTest { public stati

java中按字节获得字符串长度的两种方法

jdk本身就自带获取字符串字节长度的api了,但字符串如果包含特殊符号或全半角符号或标点符号获取到的结果会有偏差,最好的证据就是新浪微博的字数统计了 // jdk自带的获取字节长度 //注意getBytes()默认获取的是以文件编码格式的bytes,通常都是UTF-8(可以看api),不同编码格式的bytes,获取到的长度也不同,本人亲自测试过,建议获取有指定编码格式的bytes长度,如:getBytes("UTF-8") int length = new String().getBy

Java中的类和对象

类和对象 类:类是对对象的抽象,也就是说类是同一类对象的总称,这些对象具有相同的属性和方法. 对象:对象就是一个具体的事物,Java作为面向对象的语言,可以说在Java中万事万物皆对象.对象本身具有自己的属性和方法. 举个生活中的例子:我们生活中常见的人.手机.电脑.车.鸟等等就可以认为是类,然后每一个不同的人就是人这个类的对象,小米6,苹果7就是手机类的不同对象. 知道了什么是类,那么类里面有什么呢? 先来看一下类的定义方法: public class 类名{ 访问修饰符 类型名 属性名 :

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当

19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对

Java中Collections.sort()的用法

Java中Collections.sort()的使用: 在日常开发中,很多时候都需要对一些数据进行排序的操作.然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中.他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是可比较的. 怎么让一个对象是 可比较的,那就需要该对象实现 Comparable<T> 接口啦.然后重写里面的compareTo()方法.我们可以看到Java中很多类都是实现类这个接口的 如:Integer,Lo

Java中Integer类的方法

字段摘要 static int MAX_VALUE              保持 int 类型的最大值的常量可取的值为 231-1. static int MIN_VALUE              保持 int 类型的最小值的常量可取的值为 -231. static int SIZE              以二进制补码形式表示 int 值的位数. static Class<Integer> TYPE              表示基本类型 int 的 Class 实例. 构造方法摘要