java.util.List和java.util.Set区别

news2024/11/18 7:44:57

最近有个需求要求查询按照单号查询顺序,数据库是hbase,我看了之前代码没有通过查hbase进行排序,就问了前端看是否前端可以排序,答案是前端不会做排序;有2个接口其中之前的接口就是这样排序的,于是我就按个排查看不同之处,打断点看,最后发现了原来是查询条件一个是List接口接收,一个是Set集合接收;所以这里我就写下它2个集合的区别;

转自:https://www.cnblogs.com/kennyliu/p/4026762.html

对于Set 和 List都是 接口 Collection 的子接口 

1、Set 不允许重复,List允许重复 
2、Set 没有顺序,List有顺序 

另外:对于List当中,有没有重复元素的判断:是依据元素的 equals方法判断是否相等的。 
对于排序来说,是根据元素实现了Comparable接口compareTo()方法来排序的。

list集合的排序主要有以下几种排序方式:

1、Collections.sort(java对象)
        这种方式需要满足以下条件:
        1.1、list集合中元素的数据类型是一个java对象;

        1.2、该java对象必须实现Comparable类;

        1.3、重写compareTo方法;

        其中 compareTo 方法用于指示当前元素与其他元素的比较规则,一般都是以 a - b 的形式返回int类型,表示排序规则为从 a 到 b 排序,其逻辑理解就是:如果compareTo方法返回值小于0,则当前元素往前放,大于0,则往后放。

@Data
public class Student implements Comparable<Student> {
    private String name;
    private int age;

    @Override
    public int compareTo(@NotNull Student o) {

        return getAge() - o.getAge();
    }
}

@SpringBootTest
public class TestUtil {

    @Test
    public void sortTest() {
        List<Student> list = new ArrayList<>();
        Student std = new Student();
        std.setName("小王");
        std.setAge(10);

        Student std2 = new Student();
        std2.setName("小张");
        std2.setAge(6);

        Student std3 = new Student();
        std3.setName("小程");
        std3.setAge(8);

        list.add(std);
        list.add(std2);
        list.add(std3);

        //排序前
        System.out.println(JSONObject.toJSONString(list));

        //排序后
        Collections.sort(list);
        System.out.println(JSONObject.toJSONString(list));
        list.toArray();
    }

}

打印结果:

2、Collections.sort(java对象集合, new Comparator<>() {});

        这种方式与需要满足以下条件:
        1.1、list集合中元素的数据类型是一个java对象;

        1.2、重写compare方法;

@Data
@AllArgsConstructor
public class Student {
    private String name;
    private int age;

}


@SpringBootTest
public class TestUtil {

    @Test
    public void sortTest() {
        List<Student> list = new ArrayList<>();
        Student std = new Student("小王",10);
        Student std2 = new Student("小张",6);
        Student std3 = new Student("小程",8);

        list.add(std);
        list.add(std2);
        list.add(std3);

        //排序前
        System.out.println("排序前:");
        System.out.println(JSONObject.toJSONString(list));

        //排序后
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student stu1, Student stu2) {
                return stu1.getAge()- stu2.getAge();
            }
        });
        System.out.println("排序后:");
        System.out.println(JSONObject.toJSONString(list));
    }

}

Comparator 和 Comparable 的区别和理解

Comparator 可以看成是外部比较器,因为它是先有list集合,然后再对list集合用比较器去排序;

Comparable 可以看成是内部比较器,因为它是直接在java对象实现类添加了比较器,因此是先有比较器,然后再对list集合用比较器去排序;

从上面两点,也可以推测出 Comparable 的排序算法的效率应该是比 Comparator 要高效的

Comparator :使用了匿名内部类来构建了一个Comparator比较器对象,从而实现排序,优点是:不需要在创建java对象时,实现 Comparable 接口,缺点是效率比 Comparable  要低一些
 

原文链接:https://blog.csdn.net/weixin_42585386/article/details/123735556

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java每日一练(20230426)

目录 1. 天际线问题 &#x1f31f;&#x1f31f;&#x1f31f; 2. 2 的幂 &#x1f31f;&#x1f31f; 3. 对称二叉树 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

这可能是最全面的Redis面试八股文了

Redis连环40问&#xff0c;绝对够全&#xff01; Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用 C 语言编写的&#xff0c;高性能非关系型的键值对数据库。与传统数据库不同的是&#xff0c;Redis 的数据是存在内存中的&#xf…

jmeter(四)HTTP请求

启动jmeter&#xff0c;建立一个测试计划 这里再次说说怎么安装和启动jmeter吧&#xff0c;昨天下午又被人问到怎样安装和使用&#xff0c;我也是醉了&#xff1b;在我看来&#xff0c;百度能解决百分之八十的问题&#xff0c;特别是基础的问题。。。 安装&#xff1a;去官网…

状态设计模式解读

目录 问题引进 状态模式基本介绍 基本介绍 状态模式的原理类图 对原理类图的说明 状态模式解决 APP 抽奖问题 状态模式的注意事项和细节 问题引进 请编写程序完成 APP 抽奖活动 具体要求如下: 1) 假如每参加一次这个活动要扣除用户 50 积分&#xff0c;中奖概率是 10% …

尚融宝23-后端管理系统借款审核

目录 一、借款信息列表展示 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 二、借款详情 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;后端 &#xff08;三&#xff09;前端 三、借款审批 &#xf…

YOLOv7训练自己的数据集(txt文件,笔记)

目录 1.代码下载 2.数据集准备&#xff08;.xml转.txt) &#xff08;1&#xff09;修改图像文件名 &#xff08;2&#xff09;图片和标签文件数量不对应&#xff0c;解决办法 &#xff08;3&#xff09;.xml转.txt &#xff08;4&#xff09;.txt文件随机划分出对应的训练…

记录自己第一次项目管理(附件:WBS计划与会议纪要模板)

记录自己第一次项目管理 前言 20**年新入职到一家公司&#xff0c;刚到就接到紧急任务&#xff0c;因为上一个后端跑路&#xff0c;现在系统上出现接口报错、假接口的问题&#xff0c;客户又着急验收&#xff0c;所以入职之后&#xff0c;一直在着急改代码。最后因为系统没有…

Nginx+Tomcat负载均衡及动态分离

一.Nginx负载均衡实现原理 Nginx实现负载均衡是通过反向代理实现 1、 反向代理原理 2、反向代理的概念 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服…

Promise--代码实现-- ajax 传统方式和 promise 方式和 promise 代码优化/重排 方式的对比--综合代码示例

目录 Promise Promise 基本介绍 Promise 应用实例 代码实现 monster.json monster_detail_1.json 先使用 ajax 传统方式完成, 问题分析(出现回调函数嵌套) 使用 promise 方式 示意图: 使用 promise 代码优化/重排 方式完成 get.js方法 注意事项和使用细节 综合代码 …

C语言学习分享(第五次)------函数

函数 1.前言2. 什么是函数3. 库函数3.1 为什么会有库函数3.2 如何学习库函数3.3 参考文档学习库函数3.31 strcpy函数3.32 memset函数3.33 使用库函数应该包含的头文件 4.自定义函数5.函数的参数5.1 交换两数题目详解 6. 函数的调用6.1 传址调用6.2 传值调用 7. 函数的嵌套调用和…

【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现波士顿房价预测 随机森林算法 随机森林&#xff08;Random Forest&#xff09;算法 是一种 集成学习&#xff08;Ensemble Learning&#xff09;方法&#xff0c;它由多个决策树组成&#xff0c;是一种分类…

【RV1126】移植kaldi实时语音识别

文章目录 算法一、环境1.1 硬件环境--RV1126开发板1.2 交叉编译器1.3 需要Cmake版本大于3.1以上 二、交叉编译sherpa2.1 下载sherpa2.2 编译sherpa2.3 运行测试 三、下载模型四、语音测试4.1 单个语音文件解码测试4.2 开发板上使用alsa架构从MIC说话测试 算法 参考&#xff1a…

Mysql命令大全

一、mysql&#xff1a;连接Mysql数据库 mysql命令用户连接数据库。 mysql命令格式&#xff1a; mysql -h主机地址 -u用户名&#xff0d;p用户密码 连接到本机上的MYSQL 首先打开DOS窗口&#xff0c;然后进入目录mysql\bin&#xff0c;再键入命令mysql -u root -p&#xff0c;回…

开放式耳机有什么好处,分享几款知名度高的开放式耳机

开放式耳机是一种通过头骨传递声波的耳机&#xff0c;相比于传统的耳机&#xff0c;开放式耳机不用塞进耳道&#xff0c;而是在耳后的骨头里将声音传递到耳膜。而且因为不塞进耳朵&#xff0c;所以不用担心在使用过程中因为佩戴时间过长而导致的耳朵不适。所以相比于传统耳机来…

Linux-RaiDrive把ubuntu文件远程映射到Windows上

一、准备工作 系统&#xff1a;Ubuntu18.4 使用VMware安装Ubuntu虚拟机和VMware Tools_t_guest的博客-CSDN博客 Windows软件&#xff1a;RaiDrive 链接&#xff1a;https://pan.baidu.com/s/1t9lrC9lM_EXixmKYrQjfDg?pwd05ig 提取码&#xff1a;05ig 二、实操 1.设置语言 …

Ajax XHR readyState

文章目录 AJAX onreadystatechange 事件onreadystatechange 事件使用回调函数 AJAX onreadystatechange 事件 onreadystatechange 事件 当请求被发送到服务器时&#xff0c;我们需要执行一些基于响应的任务。 每当 readyState 改变时&#xff0c;就会触发 onreadystatechange…

记录6年时间3套easyui前端框架主题皮肤美化的设计历程

沉寂了许久&#xff0c;是该发点东西了&#xff0c;要不然2023年都要过去一半了 &#xff01; 第一次接触Easyui前端框架&#xff0c;还是在2016年的时候&#xff0c;有个美化easyui界面的需求&#xff0c;自己是设计师&#xff0c;前端知识也只会最基本的html和css样式&#x…

智慧班牌源码,使用springboot框架Java+vue2开发,二次开发方便快捷

智慧校园云平台电子班牌系统源码 智慧校园平台电子班牌系统源码在大数据平台下&#xff0c;对应用系统进行统一&#xff0c;以数据互联软硬结合的特点应用在校园&#xff0c;实现对校园、班级、教师、学生的管理。 智慧校园云平台电子班牌系统源码&#xff0c;使用springboot…

论文笔记:Map-Matching for low-sampling-rate GPS trajectories(ST-matching)

ACM-GIS 2019 1 Intro 将GPS数据和地图路网数据匹配提出全局地图匹配算法ST-matching&#xff08;类似于HMM的思路&#xff09; 考虑了道路网络的空间几何和拓扑结构 如果不考虑拓扑关系&#xff0c;直接进行matching的话&#xff0c;由于GPS信号的不准&#xff0c;可能轨迹会…

【Java 数据结构】二叉搜索树的实现

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…