集合的区别、适用场景以及如何排序(List,Map,Set)

Java中List Set Map 是否有序等总结 1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 List 接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。Arra... 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

1.层级关系图

Map是不在Collection下的,是单独的一个体系。
在这里插入图片描述

1.有序和无序

ArrayList,LinkedList,LinkedHashMap,LinkedHashSet是插入有序的,TreeMap和TreeSet是逻辑有序,HashSet和HashMap是无序的。

插入有序:按照放入集合的先后顺序排序,不是按照大小
逻辑有序:按照大小排序

以Set举例:

 public static void main(String[] args) {
        HashSet set1 = new HashSet();
        set1.add("hhh");
        set1.add("qqq");
        set1.add("www");
        set1.add("eee");
        set1.add("rrr");
        set1.add("ttt");
        System.out.println(JSONObject.toJSONString(set1));

        LinkedHashSet set2 = new LinkedHashSet();
        set2.add("hhh");
        set2.add("qqq");
        set2.add("www");
        set2.add("eee");
        set2.add("rrr");
        set2.add("ttt");
        System.out.println(JSONObject.toJSONString(set2));

        TreeSet<String> set3 = new TreeSet<>();
        set3.add("hhh");
        set3.add("qqq");
        set3.add("www");
        set3.add("eee");
        set3.add("rrr");
        set3.add("ttt");
        System.out.println(JSONObject.toJSONString(set3));

    }
结果:
//无序
["qqq","rrr","eee","ttt","www","hhh"]
//插入有序
["hhh","qqq","www","eee","rrr","ttt"]
//逻辑有序
["eee","hhh","qqq","rrr","ttt","www"]

2.线程安全性

ArrayList,LinkedList,HashMap,LinkedHashMap,TreeMap,HashSet,LinkedHashSet,TreeSet都是线程不安全的

3.适用场景

集合描述
ArrayList底层是数组,适用于查询多,添加和删除少的场景
LinkedList底层是链表,适用于查询少,添加和删除多的场景
HashMap底层是数组+链表,存放的是key-value键值对
LinkedHashMap底层是数组+链表,存放的是key-value键值对
TreeMap底层是数组+链表,存放的是key-value键值对
HashSet底层是维护的HashMap,去重的数据场景
LinkedHashSet底层是维护的LinkedHashMap,去重插入有序的数据场景
TreeSet底层是维护的NavigableMap,去重逻辑有序的数据场景

4.排序

1.List的排序 :Collections.sort()

 ArrayList list = new ArrayList();
        list.add("hhh");
        list.add("qqq");
        list.add("www");
        list.add("eee");
        list.add("rrr");
        list.add("ttt");
        //默认按照从小到大
        Collections.sort(list);
       	System.out.println(JSONObject.toJSONString(list));
        //如果需要从大到小排序,反转集合即可
        Collections.reverse(list);
        System.out.println(JSONObject.toJSONString(list));
结果:
["eee","hhh","qqq","rrr","ttt","www"]
["www","ttt","rrr","qqq","hhh","eee"]      

如果List中存放的是对象,需要按照对象的某个属性排序

 		List<User> listUser = new ArrayList<>();
        User user1 = new User("李四",29);
        User user2 = new User("张三",18);
        User user3 = new User("王五",30);
        User user4 = new User("李天一",40);
        listUser.add(user1);
        listUser.add(user2);
        listUser.add(user3);
        listUser.add(user4);
        Collections.sort(listUser, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                if(o1.getAge()>o2.getAge()){
                    return 1;
                }
                if(o1.getAge()<o2.getAge()){
                    return -1;
                }
                return 0;
            }
        });

        System.out.println(listUser);
结果:
[User(name=张三, age=18), User(name=李四, age=29), User(name=王五, age=30), User(name=李天一, age=40)]

2.TreeMap和TreeSet都是按大小排序的,因为它们的构造器可以使用Comparator比较器

	public TreeMap(Comparator<? super K> comparator) {
        this.comparator = comparator;
    }
    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

默认是按照从小打大排序

TreeSet<String> set3 = new TreeSet<>();
set3.add("hhh");
set3.add("qqq");
set3.add("www");
set3.add("eee");
set3.add("rrr");
set3.add("ttt");
System.out.println(JSONObject.toJSONString(set3));//["eee","hhh","qqq","rrr","ttt","www"]
     	

构造方法使用Comparator,在构造器中可以改变排序的方式

TreeSet<String> set3 = new TreeSet<>(new Comparator<String>() {
      @Override
      public int compare(String o1, String o2) {
          if(o1.compareTo(o2)<0){
             //小于时返回1,则按照从大到小排序
             return 1;
           }
           if(o1.compareTo(o2)>0){
              return -1;
           }
           return 0;
      }
});
  set3.add("hhh");
  set3.add("qqq");
  set3.add("www");
  set3.add("eee");
  set3.add("rrr");
  set3.add("ttt");
  System.out.println(JSONObject.toJSONString(set3));
  //["www","ttt","rrr","qqq","hhh","eee"]

3.set和map的排序,把集合放入list,用Collections.sort()排序

HashMap<String,String> map = new HashMap();
map.put("hhh","hhh");
map.put("qqq","qqq");
map.put("www","www");
map.put("eee","eee");
map.put("rrr","rrr");
map.put("ttt","ttt");

List<Map.Entry<String,String>> list =  new ArrayList<>(map.entrySet());


Collections.sort(list, new Comparator<Map.Entry<String,String>>() {
    @Override
    public int compare(Map.Entry<String, String> o1,
                               Map.Entry<String, String> o2) {
          if (o1.getValue().compareTo(o2.getValue()) > 0) {
              return 1;
           }
           if(o1.getValue().compareTo(o2.getValue())<0){
              return -1;
           }
             return 0;
          }
    });

System.out.println(JSONObject.toJSONString(list));
//[{"eee":"eee"},{"hhh":"hhh"},{"qqq":"qqq"},{"rrr":"rrr"},{"ttt":"ttt"},{"www":"www"}]

Java集合List、Set与Map区别及适用场景总结 List和Set都是继承自Collection接口,Map则不是 List元素有放入顺序,元素可重复,和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。Set元素无放入顺序,元素不可重复,重复元素会覆盖掉,Set检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 Map是一个接口,适合储存键值对的数据 线程安全集合类与非线程安全...... 阅读详情

相关推荐

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

java常用集合的区别与联系以及应用场景

允许重复的对象。可以插入多个null元素。是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。不允许重复对象无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。

扬帆天涯 1438

数据驱动AI落地:从业务价值到技术实践的全链路方法论

以数据驱动为核心,围绕 AI 落地全链路展开:先建全域数据体系(拉通内外部数据、治理数据质量),再将 AI 嵌入研发、制造、营销、服务等业务链路解决痛点,搭配混合算力架构保障技术落地,辅以 “小场景试错 - 复制” 战略、跨部门团队等方法论。结合美的集团数字化转型实践,最终实现 AI 对业务降本、增效、增收的价值,为企业 AI 转型提供可复用路径。

专注数据驱动领域原创分享。拆解从数据采集、建模分析到业务价值落地的全链路实践,聊决策逻辑、技术工具与场景案例。用通俗语言讲透数据如何赋能业务,与同路人共探数据价值。 1891

List、Set、Map集合的区别以及各个集合的适用场景

目 录(本篇字数:2843) 介绍 Collection容器(接口) AbstractList(抽象类,实现List接口)—列表 ArrayList(直接实现类) LinkedList(间接实现类) Vector(直接实现类) AbstractSet(抽象类,实现Set接口)—集合 HashSet(直接实现类) TreeSet(直接实现...

weixin_33895516的博客 915

零基础使用Manim画傅里叶变换

0x01 准备工作 确保你的电脑中安装的有:Python(3.6以上版本,推荐3.8)、FFmpeg(在PATH环境变量中)、LaTex发行版,如果这些都有了,就可以跳过这步。 下面是安装指南: Python:Win10用户直接在微软商店搜索Python3.8安装,也可以自行百度安装方法,在开始菜单右键打开PowerShell,或者Win+R输入PowerShell打开,输入Pyhton --version,显示3.8以上。 FFmpeg:可以直接百度下载,或者用我打包好的(下载链接)。下载好后,将ff

TagBug的博客 3191

从零上手HiAgent:构建能听懂指令的智能体框架实战指南

智能体(Agent)作为人工智能领域的重要范式,正从传统的预设流程自动化转向以目标驱动的自主规划与执行。其核心原理在于利用大语言模型(LLM)作为决策大脑,通过任务规划、工具调用与记忆机制,将模糊的自然语言指令转化为可执行的工作流。这一技术显著提升了人机协作的效率和自然度,其价值在自动化办公、数据分析与智能流程编排等场景中尤为突出。本文聚焦于HiAgent这一具体框架,深入解析其作为智能体开发平台的核心架构,涵盖规划器、执行器、工具集等关键组件,并提供从环境配置、自定义工具开发到复杂任务链构建的完整工程实践

weixin_29266007的博客 881

集合排序和比较

HashMap&lt;String, String&gt; map = Maps.newHashMap(); map.put("action", "action"); map.put("demo", "demo"); map.put("ass", "ass"); //将map的key存入集合 List&lt;String&gt; list = Lists.

天道酬勤 213

Python 对接钉钉获取员工上一篇日报或周报内容

摘要:本文介绍使用Python对接钉钉API获取员工日报/周报的方法。首先需创建钉钉应用并开通日志权限,获取员工UserID。通过获取AccessToken进行鉴权,调用topapi/report/list查询日志记录,筛选最新日报/周报后,使用topapi/report/details获取详细内容。需注意权限控制、时间范围筛选和模板匹配等问题。文末提供完整代码示例,并建议扩展自动化触发、数据存储等功能。该方法适用于企业自动化获取员工工作日志的场景。

从技术实践立足,从项目管理方法论延伸思考 804

【集合系列】集合List汇总

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 5283

SerDes系列之 SSC扩频时钟技术

扩频时钟,又称展频(SSC-Spread Spectrum Clocking),当前PCIE、DDR、USB等几乎所有的高速接口都支持SSC的功能。电子工程师在日常的电气测试中经常与之接触,在电磁传导和辐射发射验证过程中,经常需要使用到芯片的SSC功能,它的物理表现形式,就是信号的比特率会在一个很小的范围内浮动,多见于周期性变化的时钟信号。

一只豌豆象的博客 3439

多体动力学分析软件:SIMPACK_(17).SIMPACK高级编程与脚本

自定义力和约束可以用于模拟更复杂和现实的物理场景。SIMPACK 提供了接口,允许用户通过 Python 脚本来实现自定义力和约束。以下是一个示例,展示如何定义一个自定义力函数并应用于模型。# 定义自定义力函数"""自定义力函数:param t: 时间:param position: 位置:param velocity: 速度:return: 力"""# 创建一个新的 SIMPACK 模型# 添加一个刚体# 添加一个关节# 添加一个自定义力# 设置仿真参数# 运行仿真。

kkchenjj的博客 1418

java 排序集合_java 各种集合排序锦集

1.在JSONObject中保留LinkedHashMap(存储的是插入的顺序)排序?Map stateMap = new LinkedHashMap();JSONObject json= newJSONObject();/*//这样存储时,没有LinkedHashMap的顺序json.putAll(stateMap);*///这样存储时,会有LinkedHashMap的顺序与JSONObject...

weixin_39850920的博客 354

Unity 面试篇|(三)设计模式篇 【全面总结 | 持续更新 | 建议收藏】

设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码, 而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。单例模式。

游戏开发小Y的博客 12万+

java map按照value排序_基础:Java集合需要注意的 5 个问题

点击上方Java后端,选择设为星标优质文章,及时送达Java集合中的List、Set和Map作为Java集合食物链的顶级,可谓是各有千秋。本文将对于List、Set和Map之间的联系与区别进行介绍,以及这三者衍生出来的问题进行介绍(若无特地说明,jdk版本皆为1.8):List、Set和Map的联系和区别是什么?List、Set和Map的使用场景有哪些?List与Set之间的怎么转换...

weixin_39747807的博客 167

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java集合中List,Set以及Map等集合体系

概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Hashtable,LinkedHashMap,HashMap,TreeMap collection接口下还有个Queue接口,有Priority...

AthlenaA的博客 180

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java set list 效率_java 常用集合list与Set、Map区别及适用场景总结

1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set的Object必须定义equals()方法,另外list支持for循环,也就是通过下标来遍历,也可以用...

weixin_32689769的博客 1802

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java中List、Set、Map三者的区别

前言:笔者为21届应届毕业生,渣渣二本学校,昨天去面试的时候面试官问了我这个问题。当时有点懵圈了,因为平时在项目中只是使用它们,并没有深入了解三者的具体区别。因此,我记录一下自己的面试随笔,希望加深自己印象的同时也解决yidia ...

灵瑞的博客 366

Java集合中List,Set以及Map等集合体系详解(史上最全)

转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Hashtable,LinkedHashMap,HashMap,TreeMap Collection接口下还有个Queue接口,有PriorityQueue类

BlizCp的博客 143

JAVA List、set、Map集合

java集合 一、集合大纲 此图链接:https://blog.youkuaiyun.com/feiyanaffection/article/details/81394745 常用集合的分类: Collection 接口的接口 对象的集合(单列集合) ├——-List 接口:元素按进入先后有序保存,可重复 │—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全 │—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全 │—————-└ Ve

qq_45914936的博客 195

《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)

《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)

LXYDSF的博客 886

java中列与集合之间的区别

java中列与集合之间的区别 ...

代码无常,怀疑人生 101

list集合排序_Java面试第七部分 Java的集合

7.1、 HashMap排序题已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap<Integer,User>,要求对 HashMap 中的 User 的 a...

weixin_39539807的博客 135

JAVA面试——List(列表)与Set(集)、Map(映射)区别及适用场景

List和set都是继承自Collection接口,map不是 List有序放入元素可重复;Set无序放入,元素重复会覆盖 List支持索引(下标)遍历,也可以用迭代器;Set因为无序只能用迭代,无法用下标取得想要的值! List查找元素效率高,增删元素效率低,因为会引起元素位置改变;Set反之 map适合存储键值对数据 ArrayList与LinkedList的区别和适用场景 ArrayList底层是数组,LinkedList底层是链表。所以arrayList查询块,Lin..

weixin_43487532的博客 536

Java集合

Java数组是一个Java对象,数组的长度是固定的,在同一个数组中只能够存放相同类型的数据,数组可以存放基本类型的数据,也可以存放引用类型的数据。在创建数组对象时,必须指定数组对象的长度,数组一旦创建,它的长度就不能再变   (1)创建数组对象(即new一个数组时)要指定数组的长度,数组的长度一旦指定,就不能够再发生变化;   (2)同一个数组中的数据的类型必须相同,可以是基本类型,也可以是引

JBuilder3的专栏 1824

Java集合总结

Java数组是一个Java对象,数组的长度是固定的,在同一个数组中只能够存放相同类型的数据,数组可以存放基本类型的数据,也可以存放引用类型的数据。在创建数组对象时,必须指定数组对象的长度,数组一旦创建,它的长度就不能再变   (1)创建数组对象(即new一个数组时)要指定数组的长度,数组的长度一旦指定,就不能够再发生变化;   (2)同一个数组中的数据的类型必须相同,可以是基本类型,也可以是引

roy的专栏 445

详讲Java集合类 (数组和集合的区别)

数组和集合的区别: 数组: 存储多个数据 相同数据类型的有序集合 特点: 1.引用数据类型,对象数据 2.定长的,长度一旦确定不可改变 3.有序的,从0开始,每次+1 4.数据类型要求相同 集合: 存储任意类型的数据(引用数据类型) 根据数据的增删长度自动改变 Collection接口 构成Collection的单位是元素。Collection接口通常不能直接使用,但是该接口提供了添加元...

深海大冒险的博客 621
上一篇: Java常用类:HashSet类详解
下一篇: Java常用类:ThreadPoolExecutor线程池
明天就不写java了
博客等级 码龄9年 18粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值