栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Map的种类和循环对比

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Map的种类和循环对比

Map相关
        • Map的种类
          • Map接口主要的几个方法:
          • 简单看下三者的区别:
        • Map循环♻️
          • 1. 使用较多 :通过key的set集合进行遍历,然后通过key来取map的value。
          • 2. 将key的set集合以迭代器的方式遍历出来,然后通过key来取map的value。
          • 3. 将Map的键值对以迭代器的方式遍历出来,然后通过.getKey()与.getValue()方法取k、v的值。
          • 4. 直接取出map的value并放在collection中,然后将v循环遍历。
          • 5.推荐:取得所有键值对来通过foreach循环,遍历出所有k、v。

Map是一种常用存储键值对的数据集合,键以散列或者树形结构进行存储;

Map的种类

先区分一下map的种类,以及应用场景。

Map主要有三种类型:HashMap(常用)、TreeMap(树形结构)、LinkedHashMap(前两者的结合)

Map接口主要的几个方法:
V put(K key, V value)往Map中添加键值对,其中key为键,value为值;如果key存在,则覆盖原有的值;如果不存在,则新建键值对。
V get(Object key)从Map中查找键key对应的值,如果没有,则返回null
default V getOrDefault(Object key, V defaultValue)Map中查找键key对应的值,如果没有,则返回第二个参数(设置的默认值);这里的修饰符default是用在接口方法中,表示这个方法在接口中已经实现了,子类可以不实现(Java8开始支持)
Set keySet()返回Map中Key的集合;之所以返回Set,是因为Map中的key不能有重复,所以用Set最适合了
Collection values() 返回Map中Values的集合
简单看下三者的区别:
HashMapTreeMapLinkedHashMap
访问速度快慢适中
元素是否有序无序 有序默认按key排序 有序默认按插入的顺序
适用场景普通的插入查询(用的最多) 需要对key进行排序的场景需要保证查询和插入顺序一致的场景
接口HashMap内部是数组+链表的结构;在添加键值对的时候,Key做了hash处理,然后按照hash值进行排列;如果hash值没有重复,就按照数组的方式依次排列;如果hash值有重复的,就添加到已有的键值对后面(Java8以后是尾部插入),形成链表结构;在插入的时候,可以按照键的顺序进行排序,它适合用在排序比较多的场景,性能会比HashMap差些;拥有HashMap的大部分优点,且保证了插入的顺序,使得在查询的时候,可以按照插入的顺序依次读取;

总结:

Map一般用到的有HashMap,TreeMap,LinkedHashMap,并发相关的,这里入门级别的先不涉及(比如ConcurrentHashMap)

  • HashMap:插入和访问都很快,但是内部是无序排列
  • TreeMap:插入和访问都很慢,但是内部是有序排列,默认按key升序排列
  • LinkedHashMap:拥有HashMap的大部分优点,而且还可以按照元素插入的顺序来访问元素,但是性能会比HashMap差
Map循环♻️

总结下Map取值比较常用的几种遍历方法

1. 使用较多 :通过key的set集合进行遍历,然后通过key来取map的value。
Set set = map.keySet();
for (Object o : set) {
    System.out.println(o+""+map.get(o));
}
2. 将key的set集合以迭代器的方式遍历出来,然后通过key来取map的value。
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
    Object next = iterator.next();
    System.out.println("key:"+next+",value:"+map.get(next));
}
3. 将Map的键值对以迭代器的方式遍历出来,然后通过.getKey()与.getValue()方法取k、v的值。
Set> entries = map.entrySet();
Iterator> iterator1 = entries.iterator();
while (iterator1.hasNext()){
    Map.Entry next = iterator1.next();
    System.out.println("key:"+next.getKey()+",value:"+next.getValue());
}
4. 直接取出map的value并放在collection中,然后将v循环遍历。
Collection values = map.values();
for (FactoryStatus value : values) {
    System.out.println("value:"+value);
}
5.推荐:取得所有键值对来通过foreach循环,遍历出所有k、v。
Set> entries = map.entrySet();
for (Map.Entry entry : entries) {
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号