【map排序 遍历】
按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排序 遍历】相关推荐
- LIst和map的遍历
1. public static void main(String[] args) {// ArrayList类实现一个可增长的动态数组List<String> list = new Ar ...
- golang map 排序
golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...
- JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)
集合的遍历 Iterator foreach 掌握 Enumeration List Set 观察两个接口 迭代器输出 Iterator Set接口 或者 List 接口 都存在 ...
- java list for循环遍历_详解Java中list,set,map的遍历与增强for循环
详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...
- java集合for循环_详解Java中list,set,map的遍历与增强for循环
详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...
- JAVA进阶知识点总结 4-Map HashMap LinkedHashMap Map的遍历方式 斗地主案例
01_第一章:回顾_三种集合的存储方式: 02_第一章:Map集合_常用方法: 1).Map集合的特点: 1).双列集合–键值对存储: 2).键不能重复–值可以重复: 2).Map的两个子类: Map ...
- Java Map排序详解
一)Map简介 java.util.Map是一个键值对集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. HashMap:最常用的Map ...
- 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 从小到大排序 ...
- golang对map排序
golang中map元素是随机无序的,所以在对map range遍历的时候也是随机的,不像php中是按顺序.所以如果想按顺序取map中的值,可以采用以下方式: import ("fmt&qu ...
最新文章
- 前端CSS预处理器Sass
- bzoj3140: [Hnoi2013]消毒
- java第四节 类的继承/抽象/接口/多态性
- 数据结构 树的遍历(递归遍历)
- mfc cedit 默认显示内容_拼多多评价不显示的几大原因,看完之后才知道是触碰了这几个环节...
- 【数据结构与算法】之深入解析“打家劫舍”的求解思路与算法示例
- YOLOv1深刻解读
- 老师说过链表是分水岭,至少得会这些题目
- java session机制_如何学习Session的机制使用
- GoodTask for mac (任务管理器)
- 日本盗版漫画网站的罪与罚
- linux开机自检时间长,Linux 开机自检的设置(tune2fs和fsck)
- Windows 8/8.1/10 删除微软拼音、微软五笔输入法的方法
- VR头显设备相关接口详解
- learn the python in hard way习题36~39的附加习题
- 解密猫晚直播技术:如何保障全球200多个国家和地区同时在线狂欢?
- linux终端分辨率对应表,Linux下设置终端分辨率,最全的VGA代码和分辨率对照表...
- FTX 基金会资助1500万帮助新冠疫苗临床实验,将影响全球公共卫生
- stm32+定时器PWM波+电机驱动+直流电机
- ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用