Map

  • 用来描述数学中的映射关系:
    存在两个集合A,B,在f条件下,对于A中的每个元素,在B中都能找到唯一确定对的元素与其相对应。
    f: A->B

Map简介

严格上来说,Map没有继承Collection接口,并不是集合。Map仅仅表示A,B之间的关系,由于其能存储数据,所以习惯性的称其为集合。

  • Map接口的关系图

Map的key-value

每次向Map中存储数据时,都应该同时存储两个数据key和value。

key一般使用不可改变的量String类型。

Map的实现类

  • HashMap,LinkedHashMap,TreeMap
    三个常用的类,后面会重点介绍。
    HashMap:哈希算法,链表结构,在java8里,当一个哈希值所对应的value达到一定值时,会从链表变为红黑树。
    LinkedHashMap:链表和哈希算法
    TreeMap:红黑树算法

  • Hashtable
    HashMap的前身,是线程安全的。不允许对象为Null,在HashMap中允许对象为null。由于Hashtable性能极低,现在已经使用。

  • Properties
    key和value只能是String.
    是一个比较重要的类,在IO问题用的比较多,加载资源文件。

Map实例

给出一个字符串,计算出每个字母出现的次数

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;public class HashMapDemo {/** 需求:*计算出str字符串中每个字母出现的次数。**/public static void main(String[] args) {String str="vjofnkjcvnxaoixlalaaaoiovg";//先将字符串转化为字符数组的形式,方便对其进行迭代//方法:使用String类中的方法toCharArray();char[] c=str.toCharArray();//由于需要存储两个数据,所以选用Map//——如果想要有序可以用TreeMapMap<Character,Integer> map=new HashMap<>();for (char key : c) {Integer value=map.get(key);//map里面有Key,则令其Value++,否则置value为1;if(map.containsKey(key)){ map.put(key, value+1);}else{map.put(key, 1);}}System.out.println(map);}
}
//输出:{a=5, c=1, v=3, f=1, g=1, x=2, i=2, j=2, k=1, l=2, n=2, o=4}

Set,List,Map之间的转换

一般很少用到转换,在一开始选择的时候尽量选择正确的集合

  • List->Set:使用构造器
    Set< String> set=new HashSet<>(list);
    //此时会消除list中重复的元素

  • Set->List:使用构造器
    List< String> list=new ArrayList<>(set);
    //此时set中消除的重复的元素不会再恢复

  • Map不能直接与List和Set相互转换,但是可以利用Map中的方法进行间接转换

总结

  • Map 的应用很广泛
    与JavaBean对象 的转换和做缓存(工具箱)。
    javaBean对象:多对属性名=属性值(ps:不是字段名)。

  • Set,List,Map在有些情况下并不是单独使用的,偶尔会综合使用(集合也是对象),所以可以嵌套使用。

实例:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;public class MapDemo {public static void main(String[] args) {/** Set 班级Map 学院List 学校*///班级1 的学生Set<String> name1=new HashSet<>();name1.add("tom");name1.add("mary");name1.add("aliy");//班级12的学生Set<String> name2=new HashSet<>();name2.add("jery");name2.add("will");name2.add("slina");//学院AMap<String,Set<String>> class1=new HashMap<>();class1.put("小班", name1);class1.put("大班", name2);//学院BMap<String,Set<String>> class2=new HashMap<>();class2.put("小班", name1);class2.put("大班", name2);//学校List<Map<String,Set<String>>> school=new ArrayList<>();school.add(class1);school.add(class2);System.out.println(school);/*[{小班=[tom, aliy, mary], 大班=[jery, slina, will]}, {小班=[tom, aliy, mary], 大班=[jery, slina, will]}]*/}}

开心,集合终于学完了,嘿嘿。

java中映射关系Map相关推荐

  1. java 中映射关系_java – 在Hibernate中映射一对多的关系?

    我有两个表,一个用户表和一个user_avatar表.对于每个用户,user_avatar表中有3条记录,适用于3种大小的头像(大,中,小). user_avatar表具有userId列,该列引用Us ...

  2. java中map怎么遍历,Java中怎么遍历Map的所有的元素

    Java中怎样遍历Map的所有的元素 JDK1.4中 view plaincopy to clipboardprint? Map map = new HashMap(); Iterator it = ...

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

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

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

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

  5. java 怎么获取键的值_在 Java 中如何获取 Map 的所有键和值

    在 Java 中可以通过 map.entrySet() 方法获取 Map 的所有键和值. Map map = new HashMap<>(); // Get keys and values ...

  6. java中list和map详解

    java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...

  7. java中parent结构_详解java中继承关系类加载顺序问题

    详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...

  8. Java中List Set Map 是否有序等总结

    1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文 ...

  9. java中List、Map、Set、Collection、Stack、Queue等的使用

    java中这几个东西是比较常用的,虽然我用的不多,也正是因为用的不多,所以我一直搞不清楚他们之间的具体用法以及相互之间的关系,现在特单独作为一个东西来总结一下. 本文参考一下资料: 1.<jav ...

最新文章

  1. REST 架构是什么
  2. linux 查找_如何在 Linux 上查找和删除损坏的符号链接 | Linux 中国
  3. Querying an unbounded table ‘myhive.db1.datagen‘ in batch mode is not allowed
  4. Docker 环境:Nexus3.x 的私有仓库
  5. hdu3339 In Action(Dijkstra+01背包)
  6. python列表元组_Python列表元组操作
  7. mui mui.plusReady() 事件中的变量问题;
  8. 【Caffe代码解析】compute_image_mean
  9. Windows 进程激活服务
  10. 欧美文学与信仰传统书摘
  11. python舞蹈链数独游戏
  12. 绘制盐沼植被图的混合方法-文献阅读
  13. Linux十大常用命令
  14. 磁盘阵列RAID技术详解
  15. 瓴羊CEO朋新宇:从数据发现问题到数据创造价值|2022全球数字价值峰会-阿里云开发者社区
  16. UVC webcam添加H264 NV12等格式支持
  17. Memcached优化
  18. windows-系统-C盘满了怎么办-处理办法大汇总-至少能清理20个G以上
  19. ES集群搭建错误~Too many open files
  20. 开源数据挖掘工具Orange简介

热门文章

  1. Ionic2 WARNING: sanitizing HTML stripped some content when no content stripped
  2. C#中WinFrom保存文件SaveFileDialog类的使用方法
  3. java jfreechart 折线图_JFreeChart在制作折线图
  4. 跨境电商wish账户被禁用暂停的原因有哪些?wish店铺封号注意事项
  5. 传统的招投标or在线招投标
  6. Windows10 CUDA11.0安装cudnn8.0.4安装环境配置VS运行及卸载方法
  7. UDP 编程中的sendto() 与recvfrom()解析(转)
  8. 观察者(observer)模式(一)
  9. 瞎姬霸写之畅想互联网
  10. JavaScript Errors 指南