Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

  • Collentions工具类--java.util.Collections

  Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List、Map和Set是并列的。

  Collections.sort() 排序方法,实现对List对象中的元素进行排序.

package com.test.collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class CollectionsTest {

    /**
     * Integer泛型的List进行排序
     */
    public void testSort1(){
        List<Integer> integerList = new ArrayList<Integer>();
        //插入10个100以内不重复的随机整数
        Random random = new Random();
        Integer num;
        for (int i = 0; i < 10; i++) {
            do {
                num = random.nextInt(100);
            } while(integerList.contains(num));
            integerList.add(num);
            System.out.println("成功插入整数:" + num);
        }
        System.out.println("==============排序前=============");
        for (Integer integer : integerList) {
            System.out.print(integer + " ");
        }
        //调用Collections.sort()方法排序
        Collections.sort(integerList);
        System.out.println("==============排序后=============");
        for (Integer integer : integerList) {
            System.out.print(integer + " ");
        }
    }
    /**
     * String泛型的List进行排序   * 字符串类型进行比较,先数字后字母,数字0-9,字母A-Za-z
     */
    public void testSort2() {
        List<String> stringList = new ArrayList<String>();
        //添加3个乱序的String元素
        stringList.add("google");
        stringList.add("lenovo");
        stringList.add("baidu");
        System.out.println("==============排序前=============");
        for (String string : stringList) {
            System.out.println(string);
        }
        Collections.sort(stringList);
        System.out.println("==============排序后=============");
        for (String string : stringList) {
            System.out.println(string);
        }
    }

    public static void main(String[] args) {
        CollectionsTest ct = new CollectionsTest();
        ct.testSort1();
        ct.testSort2();
    }

}
  • Comparable接口和Comparator接口

  在Java中,如果两个对象需要进行排序,那么它们必须是可以比较的。用Comparable这个接口表示某个对象是可以比较的。Comparable相当于给对象定义了默认的排序规则,而如果改用其他规则进行排序,可用Comparator接口,它定义了临时比较规则。Comparable接口和Comparator接口,都是Java集合框架的成员。

  Comparable接口:

  1. 实现该接口表示:这个类的实例可以比较大小,可以进行自然排序;
  2. 定义了默认的比较规则
  3. 其 实现类需实现compareTo()方法
  4. Obja.compareTo(Obj2)方法返回正数表示a比b大,负数表示a比b小,0表示a和b相等

  Comparator接口:

  1. 用于定义临时比较规则,而不是默认比较规则
  2. 其 实现类需要实现compare()方法
  3. 用法:
    Collections.sort(List<T> list, Comparator<? super T> c),根据指定比较器产生的顺序对指定列表进行排序。

  实例:学生系列排序,默认按学生id来排序,先随机生成3个不相同的1000以内的整数做为学生的id;然后再按学生姓名来排序。

package com.test.collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class CollectionsTest {

    public void testSort() {
        List<Student> studentList = new ArrayList<Student>();
        List<Integer> studentId = new ArrayList<Integer>();
        Random random = new Random();
        Integer num;
        for (int i = 0; i < 3 ; i++) {
            do {
                num = random.nextInt(1000);
            } while (studentId.contains(num));
            studentId.add(num);
        }

        studentList.add(new Student(studentId.get(0) + "", "Tom"));
        studentList.add(new Student(studentId.get(1) + "", "Jack"));
        studentList.add(new Student(studentId.get(2) + "", "Xiaoming"));
        studentList.add(new Student(1000 + "", "Lily"));

        System.out.println("===========排序前=============");
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + "——" + student.name);
        }
        Collections.sort(studentList);
        System.out.println("===========按照id排序后=============");
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + "——" + student.name);
        }
        System.out.println("===========按照姓名排序后========");
        Collections.sort(studentList, new StudentComparator());
        for (Student student : studentList) {
            System.out.println("学生:" + student.id + "——" + student.name);
        }
    }

    public static void main(String[] args) {
        CollectionsTest ct = new CollectionsTest();
        ct.testSort();
    }

}

  执行结果:

===========排序前=============
学生:118——Tom
学生:460——Jack
学生:51——Xiaoming
学生:1000——Lily
===========排序后=============
学生:1000——Lily
学生:118——Tom
学生:460——Jack
学生:51——Xiaoming
===========按照姓名排序后========
学生:460——Jack
学生:1000——Lily
学生:118——Tom
学生:51——Xiaoming

  其中,Student类需要实现Comparable接口的compareTo()方法,StudentComparator类需要实现Comparator接口的compare()方法:

  Student.java

package com.test.collection;

import java.util.HashSet;
import java.util.Set;
/**
 * 学生类
 * @author Administrator
 *
 */
public class Student implements Comparable<Student> {
    public String id;
    public String name;
    public Set<Course> courses;//所选课程
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
        this.courses = new HashSet<Course>();//实例化sourses(Set是接口,接口不能被直接实例化)
    }
    @Override
    public int compareTo(Student o) {
        return this.id.compareTo(o.id);
    }
}

  StudentComparator.java

package com.test.collection;

import java.util.Comparator;

public class StudentComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.name.compareTo(o2.name);
    }
}
时间: 2024-12-16 08:30:26

Java—集合框架 Collections.sort()、Comparable接口和Comparator接口的相关文章

浅入深出之Java集合框架(下)

Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. 温馨提醒:建议从(上)开始看哦~ 目 录 浅入深出之Java集合框架(上) 浅入深出之Java集合框架(中)   浅入深出之Java集合框架(下) 前 言 在<浅入深出之Java集合框架(中) >中介绍了Map接口的基本操作.使用的示例是在<浅入深出之Java集合框架(上)>中的模拟学

java集合框架总结

1)java集合框架的层次结构 2)使用Collection接口定义的公用方法对集合和线性表操作 3)使用Iterator接口遍历集合 4)使用JDK的增强for循环替代迭代Iterator进行集合遍历 5)熟悉Set接口,了解何时及如何使用HashSet,LinkedHashSet或TreeHashSet来存储元素 6)使用Comparator接口来比较元素 7)熟悉List接口,了解何时以及如何使用ArrayList或者LinkedList来存储元素8)区分Vector与ArrayList,

java 集合框架小结

一:集合框架  集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.  任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 接口:即表示集合的抽象数据类型.Collection顶层接口.   实现:也就是集合框架中接口的具体实现.常用ArrayList.HashMap 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找.排序等. 二:java集合框架包含的内容   主要常用的  接口                         

JavaSE入门学习33:Java集合框架概述

一集合框架 (1)集合的概念 现实生活中的集合:很多的事物凑在一起. 数学中的集合:具有共同属性的事物的总体. Java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象. (2)集合框架的概念 有了集合的概念,什么是集合框架呢?集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何 集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 1接口:即表示集合的抽象数据类型.接口提供了让我们对集合中所表示的内容进行单独操作的可能.接口允许 集合独立操纵其

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度

Java集合框架介绍

Java集合框架是为了表示和操作集合类型而会顶的一种统一的体系结构,Java在集合框架中提供了一些线程的数据结构,加快程序的开发速度和程序的稳定性和可靠性:使用集合框架对集合里的数据进行统一的处理:集合框架可以根据框架里的元素数量动态的改变集合的容量,这样使得程序对存储空间的利用率更高,效率也更高: Java集合框架: 对外的接口:表示集合的抽象数据类型: 接口的实现:指实现接口的Java类,是可重用的数据结构 对集合运算的算法:是指执行运算的方法,例如在集合上进行查找和排序: 集合框架接口:

Java集合框架总结(4)——List接口的使用

Java集合框架总结(4)--List接口的使用 List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引.List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. 1.List接口和ListIterator接口 List作为Collection接口的子接口,可以使用Collection接口里的全部方法.List是有序集合,所以List集合里增加了一些根据索引来操作集合元素的方法: void add(int index, Object element):将元素element插

Java集合框架总结(5)——Map接口的使用

Java集合框架总结(5)--Map接口的使用 Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法,用于返回Map所以key组成的Set集合. Map集合与Set集合元素的存储形式很像,如Set接口下有HashSet.LinkedHashSet.SortedSet(接口).TreeSet.EnumSet等实现类和子接口,而Map接口下则有HashMa

Java集合框架GS Collections具体解释

Java集合框架GS Collections具体解释 作者:chszs.未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs GS Collections是一个开源的基于Java的集合框架.它兼容JDK的List.Set.Map实现.并提供了一套功能丰富的API和工具类集合,其迭代循环的实现是受Smalltalk集合框架的启示.GS Collections库的模块兼容Java 5,包含gs-collections-api.gs-collec