java 集合排序(转)
Java API针对集合类型排序提供了两种支持:
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)
第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。
第二个方法要求实现一个java.util.Comparator接口。
java.lang.Comparable接口和java.util.Comparator接口是Java对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。
如果数组或集合元素是String类型,则可以利用Java API实现的Comparator<String>对象String.CASE_INSENSITIVE_ORDER为容器元素排序。
下面给出两个里测试,涵盖集合和数组的排序,并且还演示了数组和集合的相互转换,附件里面是完整的排序演示代码。 
方法一:实现Comparable接口排序package collsort.comparable;  
package com.cvicse.sort.comparable;
public class Cat implements Comparable<Cat> {
    private int age;
    private String name;
public Cat(int age, String name) {
       this.age = age;
       this.name = name;
    }
public int getAge() {
       return age;
    }
public void setAge(int age) {
       this.age = age;
    }
    ......
    public int compareTo(Cat o) {
       return this.getAge() - o.getAge();
    }
    ......
}
通过实现Comparable接口实现个性化排序测试。排序测试,Collection.sort(list)升序排列
Collections.sort(list,
Collections.reverseOrder());降序排列;Collections.reverse(list);反转排序,先输出列表最后一
个元素
public class TestComparable {
 public static void main(String args[]) {
  test();
  test2();
 }
 public static void test() {
  ......
  List<Cat> listCat1 = new ArrayList<Cat>();
  Cat cat1 = new Cat(34, "hehe");
  Cat cat2 = new Cat(12, "haha");
  Cat cat3 = new Cat(23, "leizhimin");
  Cat cat4 = new Cat(13, "lavasoft");
  listCat1.add(cat1);
  listCat1.add(cat2);
  listCat1.add(cat3);
  ......
  System.out.println("调用Collections.sort(List<T> list)listCat2升序排序:");
  Collections.sort(listCat1);
  System.out.println("降序排列元素:");
  Collections.sort(listCat1, Collections.reverseOrder());
  System.out.println("Collections.reverse 从列表中最后一个元素开始输出:");
  Collections.reverse(listCat1);
  ......
 }
 /**
  * 针对数组的排序
  */
 public static void test2() {
  String[] strArray = new String[] { "z", "a", "C" };
  System.out.println("数组转换为列表");
  List<String> list = Arrays.asList(strArray);
  System.out.println("顺序排序列表");
  Collections.sort(list);
  System.out
    .println("按String实现的Comparator对象String.CASE_INSENSITIVE_ORDER排序----");
  Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
  System.out.println("倒序排序列表");
  Collections.sort(list, Collections.reverseOrder());
  ......
 }
}
方法二:实现Comparator接口排序
public class Person {
 private int age;
 private String name;
  ......
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
        ......
}
   实现了Comparator接口,重写了compare方法
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {
public int compare(Person o1, Person o2) {
  return o1.getAge() - o2.getAge();
 }
}
     测试方法
public class TestComparator {
 public static void main(String args[]) {
  test1();
 }
 public static void test1() {
  System.out.println("升序排序测试:");
  List<Person> listPerson = new ArrayList<Person>();
  Person person1 = new Person(34, "lavasoft");
  Person person2 = new Person(12, "lavasoft");
  Person person3 = new Person(23, "leizhimin");
  Person person4 = new Person(13, "sdg");
  listPerson.add(person1);
  listPerson.add(person2);
  listPerson.add(person3);
  Comparator<Person> ascComparator = new PersonComparator();
  System.out.println("排序后集合为:");
  // 利用Collections类静态工具方法对集合List进行排序
  Collections.sort(listPerson, ascComparator);
  System.out.println("\n降序排序测试:");
  // 从升序排序对象产生一个反转(降序)的排序对象
  Comparator<Person> descComparator = Collections
    .reverseOrder(ascComparator);
  System.out.println("利用反转后的排序接口对象对集合List排序并输出:");
  Collections.sort(listPerson, descComparator);
  outCollection(listPerson);
 }
}
     以上的例子中使用是对int类型的属性排序,对String属性排序可以用以下的方法
public int compareTo(Cat o) {return this.getName().compareTo(o.getName());}
comparetTo()函数的使用说明: 
如果	结果
<0	a<b
==0	a==b
>=0	a>b
Java如何通过所实现接口的方法进行排序是API内部的事情,Java这样处理排序目的就是对容器元素排序有一个统一的方式,以简化编程。
java 集合排序(转)的更多相关文章
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
		1 集合框架 1.1 集合框架概述 1.1.1 容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ... 
- Java集合排序(面试必考点之一)
		集合是Java面试必考知识点,而集合的排序也是非常重要的,工作中经常用到,那么这个知识点也是必须要掌握的,下面是我曾经面试时被面试官问的问题: 根据API可知,Java集合的工具类Collection ... 
- java 集合排序
		Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ... 
- Java集合排序方法comparable和comparator的总结
		一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ... 
- Java集合排序(看完秒懂)
		比如将一个List<Student>排序,则有两种方式: 1:Student实现Comparable接口: 2:给排序方法传递一个Comparator参数: 请看下面的举例: Studen ... 
- 关于java集合排序
		对于排序,java开发者并不陌生. 为避免以后遗忘,现在再次总结一下! 常见8大排序算法, 平时自己熟悉的只有几种种!冒泡,二分/折半.插入.快排等!现在一一讲解一下,这里只讲思想,暂时不做实现! 一 ... 
- Java集合排序
		[ 1.对普通的包装类基本数据类型的list数组排序(Integer,Long,Double) ] Collections.sort(List list) [例] List<Long> m ... 
- Java比较器对数组,集合排序一
		数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ... 
- Java集合框架实现自定义排序
		Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ... 
随机推荐
- [转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
			[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/st ... 
- canvas仿黑客帝国的字符下落
			? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 
- SVN版本控制与Visual Studio 2012的完美结合
			今天电脑重装了,所以vs,sqlserver,svn都得重装,因为我的公司目前使用的版本控制工具是svn.vs和sqlserver的安装均正常没有出现问题,但是在装svn的时候出了一点小插曲!svn下 ... 
- 利用MSF溢出攻击讲解
			msf的强大之处也就不做探讨了,虽然这些东西网上很多.但我想说说我的感受. 这次的演示是在BT5中远程攻击一台win2003 sp2 metasploit是4.3的 需要说明的一点是 现在的BT5中不 ... 
- centos网络安装中的注意点
			转自centos网络安装中的注意点 centos网络安装的教程网上很多,这里仅仅记录一下安装过程中网上别处提及很少的注意点. 1.centos默认会安装selinux,并且默认阻止ftp服务,所以要禁 ... 
- 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)
			1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3940 Solved: 1736 Description ... 
- hadoop2.2编程:mapreduce编程之二次排序
			mr自带的例子中的源码SecondarySort,我重新写了一下,基本没变. 这个例子中定义的map和reduce如下,关键是它对输入输出类型的定义:(java泛型编程) public static ... 
- 牛刀小试、用SharePoint 实现请假管理功能
			转:http://www.cr173.com/html/15518_1.html "请假管理"应用,应该算是 SharePoint 的"Hello World!" ... 
- C#入门经典学习笔记一
			这篇主要讲C#的一些语法. 1.委托 委托类型声明的格式如下: public delegate void TestDelegate(string message); delegate 关键字用于声明一 ... 
- RHEL7 -- Linux搭建FTP虚拟用户
			安装vsftpd软件包[root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum install db4 db4-utils 建 ... 
