Java集合中用Collections排序

2023-11-08

Collections简介及常用功能

java.util.Collections是集合工具类,用来对集合进行操作。

部分主要方法如下:

public static void reverse(List<?> list) 反转指定list中的顺序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");
        Collections.reverse(list);
        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
    }
}

计算结果:

我很好
谢谢
你好么

public static <T> boolean addAll(Collection<? super T> c, T... elements)往集合中添加一些元素。添加的元素可能是数组或者单个元素。

源码如下:

    @SafeVarargs
    public static <T> boolean addAll(Collection<? super T> c, T... elements) {
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");

        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            System.out.println(iter.next());
        }
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        String[] str = {"我来自哪里","我是谁"};
        Collections.addAll(list,str);
        for (String s : list) {
            System.out.println(s);
        }
    }
}

运行结果:

你好么
谢谢
我很好
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你好么
谢谢
我很好
我来自哪里
我是谁

 

public static void swap(List<?> list, int i, int j) :交换集合中指定两个下标元素位置。

import java.util.ArrayList;
import java.util.Collections;


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<String > list = new ArrayList<String>();
        list.add("你好么");
        list.add("谢谢");
        list.add("我很好");

        Collections.swap(list,1,2);
        for (String s : list) {
            System.out.println(s);
        }
    }
}

运行结果:

你好么
我很好
谢谢

public static <T extends Comparable<? super T>> void sort(List<T> list)集合list继承Comparable后根据compareTo方法排序

import java.util.ArrayList;
import java.util.Collections;


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<Student > list = new ArrayList<Student>();
        list.add(new Student("张三",18));
        list.add(new Student("李四",15));
        list.add(new Student("王二",19));
        list.add(new Student("麻子",18));

        Collections.sort(list);
        for (Student s : list) {
            System.out.println(s);
        }
    }
}

class Student implements Comparable<Student>{
    private String name;
    private int age;
    //按照年龄大小排序
    @Override
    public int compareTo(Student s) {
        if (s.age == this.age) {
            return 0;
        } else if(s.age > this.age){
            return 1;
        }
        return -1;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

运行结果:

Student{name='王二', age=19}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='李四', age=15}

 

public static <T> void sort(List<T> list, Comparator<? super T> c)

:将集合中元素按照指定规则排序。

package task03;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


public class CollectionsDemo01 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<Student>();
        list.add(new Student("张三",18));
        list.add(new Student("李四",15));
        list.add(new Student("王二",19));
        list.add(new Student("麻子",18));

        Collections.sort(list,Comparator.comparing(Student::getAge));
        for (Student s : list) {
            System.out.println(s);
        }
    }
}

class Student implements Comparator<Student> {
    private String name;
    private int age;
    //按照年龄大小排序
    @Override
    public int compare(Student o1, Student o2) {
        if (o1.age == o2.age) {
            return 0;
        } else if (o1.age > o2.age) {
            return 1;
        }
        return -1;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

运行结果:

Student{name='李四', age=15}
Student{name='张三', age=18}
Student{name='麻子', age=18}
Student{name='王二', age=19}


Comparable和Comparator两个接口的区别。

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的
compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码
实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进
行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort
或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构
(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java集合中用Collections排序 的相关文章

  • SVO、vinsmono、 OKVIS系统比较

    几个经典视觉slam系统的比较 SVO 高翔链接 https www zhihu com question 39904950 answer 138644975 处理的各个线程 tracking部分 frame to frame frame
  • 基础算法题——斐波那契(快速求幂、斐波那契特性、矩阵)

    基础算法题 斐波那契 做题心得 这道算法题花了我几乎一天的时间才弄懂 不得不说我还是太菜了 该算法题主要考查了对斐波那契数列的理解 矩阵与斐波那契结合 快速求幂 在看了数篇博客后我才慢慢对矩阵 快速求幂有所了解 由于是初步接触这类题型 如果
  • unity 获取网络时间

    网络时间 using System using System Collections using System Collections Generic using UnityEngine using UnityEngine Networki
  • C++ 逗号运算符

    逗号运算符 comma operator 含有两个运算对象 按照从左向右的顺序依次求值 对于逗号运算符来说 首先对左侧的表达式求值 然后将求值结果丢弃掉 逗号运算符真正的结果是右侧表达式的值 如果右侧运算对象是左值 那么最终的求值结果也是左
  • 大数据FLINK实时数仓项目实战

    一 FLINK实时数仓项目简介 1 普通实时计算与实时数仓比较 普通的实时计算优先考虑时效性 所以从数据源采集经过实时计算直接得到结果 如此做时效性更好 但是弊端是由于计算过程中的中间结果没有沉淀下来 所以当面对大量实时需求的时候 计算的复
  • 串口通信(RS232的C程序)

    Bioscom使用注意 串口接线方式为4 6 7 8分别短接 仅此函数要求 否则会造成只能接受无法发送数据 函数返回值错误 函数名 bioscom 功 能 操作port指定的RS232异步通讯口 用 法 int bioscom int cm
  • 剑指 Offer 25. 合并两个排序的链表

    合并两个排序的链表 思路 题解 package swordPointingToTheOffer public class ListNode int val ListNode next ListNode int x val x public
  • C语言:前 n 项求和

    前 n 项求和 算法思路 1 前n项求和由于第一项和最后一项都已知适合用for循环 2 当n趋于无穷时 调和数列的极限趋于无穷 代码如下 include
  • Eclipse 3.4+MyEclipse 6.01+MyEclipse 6.01注册机+Eclipse 3.1.1汉化包+Myeclipse6.0使用教程官方下载地

    Eclipse 3 4 MyEclipse 6 01 MyEclipse 6 01注册机 Eclipse 3 1 1汉化包 Myeclipse6 0使用教程官方下载地 2007年10月29日 星期一 05 30 P M 都是供WINDOWS
  • LeetCode:392(Python)—— 判断子序列(简单)

    判断子序列 概述 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子序列是原始字符串删除一些 也可以不删除 字符而不改变剩余字符相对位置形成的新字符串 例如 ace 是 abcde 的一个子序列 而 aec 不是 输入
  • Leetcode刷题笔记0624(回文字符串)

    解题思路 1 首先考虑用双指针 一头一尾依次遍历 遇到相等的l 和r 进入下一层循环 2 遇到不相等的记录值count 1 判断l 与r是否相等 l与r 是否相等 否则直接返回false 形成代码 class Solution public
  • F轮融资3.6亿美元,Keep能撑起20亿美元的估值吗?

    高喊着 自律给我自由 的keep 在自由的道路上不断奔跑 去年12月底 keep完成了F轮3 6亿美元融资 本轮融资由软银愿景基金领投 高瓴资本 蔻图资本跟投 成为近年国内运动科技领域融资的最大金额 keep估值成功站上20亿美元大关 这距
  • STM32 ST-LINK Utility安装及使用

    TM32 ST LINK Utility集成开发环境的安装比较简单 基本上就是一路Next下去 还是按照常规安装教程 截图 讲述一下吧 以上面下载的 STM32 ST LINK Utility v4 0 0 setup exe 软件为例讲述
  • 安装SQL Server2012报Microsoft.NET Framework4无法安装错误解决方案

    今天在安装SQL Server2012版本时 在最后出现 没有安装Microsoft NET Framework4 请安装这个继续安装SQLServer2012 于是就重官网下载Microsoft NET Framework4进行安装出现如
  • homebrew安装mysql及修改配置

    安装mysql数据库5 7 5前后版本有所差异 以前的版本会在安装的时候要去输入密码 5 7 6 版本会在安装的时候随机生成一个密码 用图形界面化安装的时候会显示密码 而用 brew install mysql命令安装的话 就不会显示密码了
  • Volocopter将在新加坡推出空中的士服务;铂金资本72亿美元收购海航旗下英迈

    今日看点 铂金资本 Platinum Equity 将以72亿美元收购海航旗下的英迈 Volocopter将在新加坡推出空中的士 希尔顿与锦江集团续签合作协议 将在华开逾600家希尔顿欢朋酒店 爱立信携手意大利电信及高通公司基于5G毫米波创
  • c# ThoughtWorks 生成二维码

  • 004 C++基础篇

    前言 大家好 本文将会为您带来内联函数 auto关键字 基于范围的for循环 指针空值nullptr相关知识 一 内联函数 什么是内联函数 以inline修饰的函数叫做内联函数 编译时C 编译器会在调用内联函数的地方展开 没有函数调用建立栈
  • 关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈

    之前测试过公司的外网IP 因为之前一直很注意对外映射的端口 都限制了可以访问的IP地址和端口 所以之前扫描的时候是一个端口都扫描不出来的 最近闲的无事 想着再扫描试试 结果发现居然开放了25和110端口 我当时第一反应 我靠 不会有人已经黑
  • cookie登录_注册登录 与 Cookie

    开始之前 我们先简单了解一下 注册 登录 的流程 无代码 进入注册页面 用户填入用户名 密码 手机号等 注册信息 前端验证用户填入的信息是否符合要求 如果不符合要求 就提示用户输入错误 重新输入 如果符合要求 就将 注册信息 作为 post

随机推荐

  • ARP广播原理和数据包格式

    1 ARP广播原理 1 A 135 24 25 23 和同一网段内的主机B 135 24 25 32 通信 查找arp 表没有32 IP的MAC地址 判断A 和B 是在同一局域网内 A向局域网发送ARP广播 B收到广播后 会把自己的MAC地
  • Redis集群部署文档(centos7系统)

    Redis集群部署文档 centos7系统 Redis是一个高性能的键值存储系统 常用于缓存 消息队列等场景 在大规模应用中 为了提高性能和稳定性 可以采用Redis集群搭建方式 Redis集群采用分布式架构 将数据分散存储在多个节点上 提
  • 漏洞复现-永恒之蓝(MS17-010)

    目录 一 漏洞介绍 1 永恒之蓝是什么 2 漏洞原理 3 影响版本 二 实验环境 三 漏洞复现 四 利用exploit模块进行渗透 一 漏洞介绍 1 永恒之蓝是什么 永恒之蓝是指2017年4月14日晚 黑客团体Shadow Brokers
  • SVPWM的一些参数

    SVPWM的一些参数 1 直流母线电压利用率 一般我们所说的电压利用率是指逆变器输出线电压的基波幅值与直流母线电压之比值 可以看出 电压利用率并不是一个恒定值 因为逆变器输出线电压的基波幅值是变化的 因此一般只讨论最高电压利用率 SVPWM
  • 用C语言单片机编程为什么总是用无符号的数据类型来定义?

    注意 答案和题目均转自百度知道 char型可以表示数的范围是 128到127 所占位数是8位int型可以表示数的范围是 32768到32767 所占位数是16位假如用有符号的数据类型表示 如果你要表示的数是128 那你就得定义int型 用了
  • Openharmony环境搭建

    鸿蒙系统开发环境搭建 前言 工具下载 开发环境 HUAWEI DevEco Device Tool 开发环境的准备 Windows开发环境准备 获取软件 vscode 安装 安装Python 安装Node js 安装hpm 安装DevEco
  • android中跨进程通讯的4种方式

    android中跨进程通讯的4种方式 转自 http www androidsdn com article show 137 由于android系统中应用程序之间不能共享内存 因此 在不同应用程序之间交互数据 跨进程通讯 就稍微麻烦一些 在
  • 神经网络:LSTM基础学习

    1 LSTM简介 在时间序列数据学习中 传统的循环神经网络 RNN 存在较多的学习瓶颈和技术缺陷 而长短时记忆 LSTM 神经网络克服了循环神经网络的缺陷 使其在长时间序列数据学习训练中能克服梯度爆炸和梯度消失的瓶颈 展现出超强的长系列数据
  • 比例数据可视化——(pyecharts)

    本文数据来自于大数据可视化技术这本书 用于复习 1 饼图 1 1 基础饼图 import pandas as pd from pyecharts charts import Pie from pyecharts import options
  • 推荐前 6 名 JavaScript 和 HTML5 游戏引擎

    推荐 使用 NSDT场景编辑器 助你快速搭建3D应用场景 事实是 自从引入JavaScript WebGL API以来 现代浏览器具有直观的功能 使它们能够渲染更复杂和复杂的2D和3D图形 而无需依赖第三方插件 你可以用纯粹的JavaScr
  • springboot+mybatisplus 配置多数据源打印sql语句失效的问题

    目录 1 如果没有配置多数据源 下打印sql 只在yml里面配置就会报如下的信息 2 这里说一下解决方法两种方式 都是在多数据源配置文件下 加入代码解决 1 如果没有配置多数据源 下打印sql 只在yml里面配置就会报如下的信息 Creat
  • windows 环境下,浏览器如何拉起应用程序?

    由于浏览器的限制 我们无法在web程序中直接拉起应用程序 今天告诉大家一个方式 可以在一定程度上处理这个问题 首先用java程序生成一个注册表文件 package com fh controller system regedit impor
  • 初识IDA工具

    工具 IDA工具 链接 https pan baidu com s 1Zgzpws6l2M5j1wkCZHrffw 提取码 ruyu 里面有安装密码 PassWord qY2jts9hEJGy 里面分析32位和64位启动快捷方式 打开IDA
  • 十、C++11左值右值、左值引用、右值引用、万能引用、完美转发

    10 C 11左值右值 左值引用 右值引用 10 1 左值 右值 左值 可以在 左边使用的值 右值 只能在 右边使用的值 字面量 中间结果 临时对象 匿名对象 无法直接取地址 不能使用左值引用 10 2 左值引用 右值引用 实例 左值引用
  • day35 贪心

    860 柠檬水找零 按照客户给的钱进行不同的找钱策略 406 根据身高重建队列 先按照身高进行高到低排序 再按照位次插入即可 452 用最少数量的箭引爆气球 先按照左边界进行排序 判断是否重叠 如果重叠了直接count 如果不重叠更新最小的
  • cargo 中 github 换源

    touch cargo config echo source crates io replace with tuna source tuna registry https mirrors tuna tsinghua edu cn git c
  • CTF安全竞赛介绍

    目录 一 赛事简介 二 CTF方向简介 1 Web Web安全 1 简介 2 涉及主要知识 2 MISC 安全杂项 1 介绍 2 涉及主要知识 3 Crypto 密码学 1 介绍 2 涉及主要知识 4 Reverse 逆向工程 1 介绍 2
  • 封装element-ui中的Drawer(抽屉)

    之前我都不知道有drawer这个方法 平常对于那些弹框我一般习惯用dialog这个组件 然而前几天 我发现 drawer也用起来不错 便想起来 把他封装起来 好复用 下面呢 就直接上代码了
  • linux三个线程输出abc,三个线程循环输出ABC10次

    import java util concurrent locks Lock import java util concurrent locks ReentrantLock public class ABC private static i
  • Java集合中用Collections排序

    Collections简介及常用功能 java util Collections是集合工具类 用来对集合进行操作 部分主要方法如下 public static void reverse List