按key排序:使用Comparator进行排序

按Key排序主要用于TreeMap,可以实现按照Key值的大小,在对象插入时直接插入到合适的位置,保持Map的顺序性。

来看TreeMap的构造函数:TreeMap(Comparator<? super K> comparator):构造一个新的、空的树映射,该映射根据给定比较器进行排序。

这里的比较器是key的比较器。所以定义比较器时用于比较的两个参数是Key的数据类型的对象。
比较声明器:

public class MapKeyComparator implements Comparator<String> {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}
}

使用声明器进行排序:

Map<String, Map<String, List<Insurce>>> sortMap = new TreeMap<>(new MapKeyComparator());
sortMap.putAll(collect);
System.out.println(sortMap);

排序参考链接:https://blog.csdn.net/hui008/article/details/81702883?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-81702883-blog-124148763.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-81702883-blog-124148763.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=1

遍历:map的4种遍历方式

1、在for循环中使用entrySet的遍历,也可以同时拿到key和value,用的最多

Map <String,String>map = new HashMap<String,String>();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
for(Map.Entry<String, String> entry : map.entrySet()){String mapKey = entry.getKey();String mapValue = entry.getValue();System.out.println(mapKey+":"+mapValue);
}

2、在for循环中使用map.keySet()遍历key通过map.get(key)获取单个值,或使用map.values()遍历获取values
这种方式一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;

Map <String,String>map = new HashMap<String,String>();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
//key
for(String key : map.keySet()){System.out.println(key);
}
//value
for(String value : map.values()){System.out.println(value);
}
System.out.println("通过map.keyset进行遍历key和value");for (String key:map.keySet()){System.out.println("key= "+key+" and value= "+map.get(key));}

3、通过Iterator遍历
在使用Iterator遍历时:使用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素

Iterator<Entry<String, String>> entries = map.entrySet().iterator();
​
//用迭代器的时候注意:next()方法在同一循环中不能出现俩次!
//否则会抛出NoSuchElementException异常。
while(entries.hasNext()){Entry<String, String> entry = entries.next();String key = entry.getKey();String value = entry.getValue();System.out.println(key+":"+value);
}

4、通过键找值遍历(就是第二种遍历key的方式+get值的方式)
这种方式的效率比较低,因为本身从键取值是耗时的操作,不建议使用;

for(String key : map.keySet()){String value = map.get(key);System.out.println(key+":"+value);
}

一些结论:
如果只是获取key,或者value,推荐使用keySet或者values方式
如果同时需要key和value推荐使用entrySet
如果需要在遍历过程中删除元素推荐使用Iterator
如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中
map遍历参考链接:https://blog.csdn.net/qq_44750696/article/details/112254719

【map排序 遍历】相关推荐

  1. LIst和map的遍历

    1. public static void main(String[] args) {// ArrayList类实现一个可增长的动态数组List<String> list = new Ar ...

  2. golang map 排序

    golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...

  3. JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)

    集合的遍历 Iterator   foreach  掌握   Enumeration List    Set    观察两个接口 迭代器输出 Iterator Set接口 或者 List 接口 都存在 ...

  4. java list for循环遍历_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  5. java集合for循环_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  6. JAVA进阶知识点总结 4-Map HashMap LinkedHashMap Map的遍历方式 斗地主案例

    01_第一章:回顾_三种集合的存储方式: 02_第一章:Map集合_常用方法: 1).Map集合的特点: 1).双列集合–键值对存储: 2).键不能重复–值可以重复: 2).Map的两个子类: Map ...

  7. Java Map排序详解

    一)Map简介 java.util.Map是一个键值对集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. HashMap:最常用的Map ...

  8. Go语言map排序(key/value排序)

    Go语言map排序(key/value排序) 1.前言 2.实现map遍历有序 2.1 key有序 2.1.1 从小到大排序 2.1.2 从大到小排序 2.2 value有序 2.2.1 从小到大排序 ...

  9. golang对map排序

    golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...

最新文章

  1. 前端CSS预处理器Sass
  2. bzoj3140: [Hnoi2013]消毒
  3. java第四节 类的继承/抽象/接口/多态性
  4. 数据结构 树的遍历(递归遍历)
  5. mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...
  6. 【数据结构与算法】之深入解析“打家劫舍”的求解思路与算法示例
  7. YOLOv1深刻解读
  8. 老师说过链表是分水岭,至少得会这些题目
  9. java session机制_如何学习Session的机制使用
  10. GoodTask for mac (任务管理器)
  11. 日本盗版漫画网站的罪与罚
  12. linux开机自检时间长,Linux 开机自检的设置(tune2fs和fsck)
  13. Windows 8/8.1/10 删除微软拼音、微软五笔输入法的方法
  14. VR头显设备相关接口详解
  15. learn the python in hard way习题36~39的附加习题
  16. 解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?
  17. linux终端分辨率对应表,Linux下设置终端分辨率,最全的VGA代码和分辨率对照表...
  18. FTX 基金会资助1500万帮助新冠疫苗临床实验,将影响全球公共卫生
  19. stm32+定时器PWM波+电机驱动+直流电机
  20. ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用

热门文章

  1. 游戏设计师与40种技巧
  2. microsoft 自动激活服务器kms搭建
  3. 天使童装项目的自我感受
  4. vue.js 实现评价五角星组件
  5. 整体大于部分_你怎么看“整体大于部分之和”?
  6. 《IT大败局》--进行时篇
  7. 怀旧不同服务器位面系统,魔兽世界怀旧服惊现位面系统 网友:这还算原汁原味吗?...
  8. 使用VS2022发布后端接口,创建本地IIS服务器,并且能通过外网能访问到你的端口
  9. 互联网企业进军券商业
  10. 2021深圳高考成绩查询时间,2021深圳高考时间表