IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [ XJTUSE ]JAVA语言进阶知识——9.5 Collections类与比较器 -> 正文阅读

[数据结构与算法][ XJTUSE ]JAVA语言进阶知识——9.5 Collections类与比较器

9.5 Collections类与比较器

9.5.1 Collections类

Java的集合框架中还有一个重要的辅助工具类java.util.Collections,它包含了各种有关集合操作的静态多态方法。此类不能实例化,用于对集合中的元素进行排序、查询以及线程安全等各种操作算法,为集合提供服务。Collections 类的方法有几十个,下表仅列出查找
替换、排序的常用方法,其余详细用法可参考Java API。
在这里插入图片描述
另外,Collections 类还提供了同步集合的功能,Collections 的synchronizedXXX系列方法(XXX表示集合类型)会返回同步化集合类,如synchronizedMap、synchronizedList、synchronizedSet等,它们都是通过互斥机制来实现对集合操作的同步化。

示例 Collections 常用方法演示。

代码如下

public class CollectionsTest {
    public static void main(String[] args) {
        //排序
        List<Double> list = new ArrayList<Double>();
        double array[]={123,243,141.1,23,45};
        for (int i = 0; i < array.length; i++) {
            list.add(new Double(array[i]));
        }
        Collections.sort(list);
        System.out.println("sorted number: ");
        for (int i = 0; i <array.length ; i++) {
            System.out.println(list.get(i));
        }
        //逆转
        Collections.reverse(list);
        System.out.println("reversed number: ");
        for (int i = 0; i <array.length ; i++) {
            System.out.println(list.get(i));
        }
        System.out.println("min number is: "+Collections.min(list));
    }
}

运行结果如下

sorted number: 
23.0
45.0
123.0
141.1
243.0
reversed number: 
243.0
141.1
123.0
45.0
23.0
min number is: 23.0

9.5.2 比较器

Java的集合框架里有两类比较器: Comparable 和Comparator,分别对应java.util.Comparable接口和java.util.Comparator接口,用于对集合对象进行排序

Comparable属于排序接口,即实现它的具体类都支持排序功能。假如这些具体类的对象存放于某种集合或数组中,则该集合或数组可以调用Collections.sort()或Arrays.sort()来进行排序。另外,TreeSet 和TreeMap本身具有排序功能,不需要比较器

Comparable接口只有一个方法: public int compareTo(T o)。如果要比较对象a和b的大小,则a.compareTo(b)。返回值小于0,表示a小于b;返回值等于0,表示a等于b;返回值大于0,表示a大于b。

Comparator是比较器接口,如果某个类的对象需要排序,而该类本身没有实现Comparable接口,则可以通过此类实现Comparator接口来为其创建一个比较器比较对象大小,然后通过比较结果排序。这和Comparable的具体类不同,Comparable 的具体类属于自身具备排序功能的排序类。

Comparator接口有两个方法: int compare(T o1, T o2) ; boolean equals(Object obj)。 若一个类要实现Comparator接口,它一定要实现compare(To1,To2)方法,但可以不实现equals(Object obj)方法,因为所有类都已经默认继承了java.lang.Object中的equals(Object obj)int compare(T o1, T o2)可以比较o1和o2的大小。返回值小于0,表示o1小于o2小;返回值为0,表示o1 等于o2;返回值大于0,表示o1大于o2。

//Product实现Comparable比较器,本身支持排序
class ProductMe implements Comparable<ProductMe>{
   int id;
   String name;

    public ProductMe(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return name+"-"+id;
    }

    @Override
    public int compareTo(ProductMe productMe) {
        return name.compareTo(productMe.name);
    }
}

//为ProductMe创建一个升序比较器,根据id升序排序
class AscComparator implements Comparator<ProductMe>{

    @Override
    public int compare(ProductMe productMe, ProductMe t1) {
        return productMe.getId()-t1.getId();
    }
}
//为ProductMe创建一个降序比较器,根据id升序排序
class DescComparator implements Comparator<ProductMe>{

    @Override
    public int compare(ProductMe productMe, ProductMe t1) {
        return t1.getId()-productMe.getId();
    }
}
public class CompareTest {
    public static void main(String[] args) {
        ArrayList<ProductMe>list = new ArrayList<>();
        list.add(new ProductMe(12,"a"));
        list.add(new ProductMe(10,"c"));
        list.add(new ProductMe(22,"d"));
        list.add(new ProductMe(11,"b"));
        System.out.printf("original sort,list: %s\n",list);

        //对list进行排序,按照ProductMe实现的CompareTo()进行排序
        Collections.sort(list);
        System.out.printf("product name sorted list:%s\n",list);

        //通过比较器AscComparator进行排序
        Collections.sort(list,new AscComparator());
        System.out.printf("asc id sorted,list:%s\n",list);

        //通过比较器DescComparator进行排序
        Collections.sort(list,new DescComparator());
        System.out.printf("desc id sorted,list:%s\n",list);
    }
}

运行结果如下

original sort,list: [a-12, c-10, d-22, b-11]
product name sorted list:[a-12, b-11, c-10, d-22]
asc id sorted,list:[c-10, b-11, a-12, d-22]
desc id sorted,list:[d-22, a-12, b-11, c-10]
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:17:27  更:2021-09-05 11:19:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:32:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码