文章目录

  • 1.Map集合概述
  • 2.Map集合特点
  • 3.Map常用子类
  • 4.Map集合常用方法
    • 4.1 添加
    • 4.2 删除
    • 4.3 判断
    • 4.4 获取
  • 5.Map集合的3种遍历方式
    • 5.1 keySet()
    • 5.2 values()
    • 5.3 entrySet()
    • 5.4 Lambda表达式
  • 6.Map集合存储自定义对象
    • 6.1 HashMap存储自定义对象
    • 6.2 TreeMap存储自定义对象
  • 7.代码示例

1.Map集合概述

Map集合是一种双列集合,每个元素包含两个值,也被称为”键值对集合“。

元素格式:key=value(键值对元素)

Map:存储时必须保持键的唯一性

ps: Collection一次添加一个元素,称为”单列集合“。


2.Map集合特点

  1. Map集合的特点都是由键决定
  2. 键值无序,不重复,无索引的。后面重复的键会覆盖前面的整个元素。
  3. 值无要求
  4. 键值对都可以为null

3.Map常用子类

  1. HashTable:内部结构是哈希表,同步。不允许null作为键,不允许null作为值。
    —Properties:用来存储键值对型的配置文件的信息,可以和IO技术结合。

  2. HashMap:内部结构是哈希表,不同步。允许null作为键,允许null作为值。

  3. TreeMap:内部结构是二叉树,不同步。对Map集合中的进行排序


4.Map集合常用方法

4.1 添加

value put(key,value):返回前一个和key关联的值,如果没有,返回null

4.2 删除

void clear():清空Map集合
value remove(key):根据指定的key删除这个键值对

4.3 判断

boolean containsKey(key):是否包含值
boolean containsValue(value):是否包含键
boolean isEmpty()

4.4 获取

value get(key):通过键获取值,如果没有键则返回null。可以通过是否返回null判断该键是否存在。
int size():获取键值对的个数

        Map<String,Integer> map = new HashMap<String,Integer>();System.out.println(map.put("abc1",21));//nullSystem.out.println(map.put("abc2",22));//nullSystem.out.println(map.put("abc2",23));//22System.out.println(map.size());//2System.out.println(map.containsKey("abc2"));//trueSystem.out.println(map.containsKey("abc3"));//falseSystem.out.println(map.containsValue(21));//trueSystem.out.println(map.containsValue(22));//falseSystem.out.println(map.get("abc2"));//23System.out.println(map.get("abc3"));//nullSystem.out.println(map.remove("abc1"));//21System.out.println(map.remove("abc3"));//nullmap.clear();System.out.println(map);// { }

5.Map集合的3种遍历方式

5.1 keySet()

调用keySet()方法,获取Map集合所有的键,再找值

        Map<String, Integer> map = new HashMap<String, Integer>();map.put("abc1", 21);map.put("abc2", 22);map.put("abc3", 23);//keySetSet<String> set = map.keySet();//键不可以重复,用set集合装for (String s : set) {System.out.println(map.get(s));//通过键找值}

5.2 values()

调用value()方法,将值放到Collection集合中,再遍历

        Map<String, Integer> map = new HashMap<String, Integer>();map.put("abc1", 21);map.put("abc2", 22);map.put("abc3", 23);//valuesCollection<Integer> collection = map.values();//值可以重复,用Collection集合装for (Integer i : collection) {System.out.println(i);}

5.3 entrySet()

  1. 用entrySet()方法,把Map集合转成Set集合,集合里的对象类型为:Map.entry<K,V>

  2. 用foreach调出Set集合中的每个对象,运用getKey()和getValue()调出对象的键和值

        Map<String, Integer> map = new HashMap<String, Integer>();map.put("abc1", 21);map.put("abc2", 22);map.put("abc3", 23);//entrySetSet<Map.Entry<String,Integer>> setMe = map.entrySet();for (Map.Entry<String,Integer> me : setMe) {System.out.println(me.getKey()+":"+me.getValue());}

5.4 Lambda表达式

        Map<String, Integer> map = new HashMap<String, Integer>();map.put("abc1", 21);map.put("abc2", 22);map.put("abc3", 23);//Lambda表达式map.forEach((k,v)->{System.out.println(k+":"+v);});

6.Map集合存储自定义对象

6.1 HashMap存储自定义对象

当map中的键相同时,会把之前的那对元素去掉。

在下列代码中,往HashMap集合中加入一对键为学生类的对象。现在要求当学生对象中的姓名和年龄相同时为同一个学生,因为计算机默认Map集合中元素地址不同,键不同,,也就是说,即使现在学生的姓名和年龄都一样,但是创建时实例的地址不同,那么就被认定不同。为完成上述需求,应重写Student类中的hashCode()和equals()方法。

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}public class Demo {public static void main(String[] args) {HashMap<Student,String> map = new HashMap<>();map.put(new Student("张三",21),"北京");map.put(new Student("李四",23),"上海");map.put(new Student("王五",25),"广东");map.put(new Student("李四",23),"新疆");map.forEach((stu,str)->{System.out.println(stu.getName()+":"+stu.getAge()+"——"+str);});}
}

6.2 TreeMap存储自定义对象

键对象所属的类需要实现Comparable接口或者TreeMap拥有比较器,之后才能存储自定义对象

import java.util.*;class Student implements Comparable<Student>{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}@Overridepublic int compareTo(Student o) {int temp = this.getName().compareTo(o.getName());return temp==0 ? this.getAge()-o.getAge() : temp;}}public class Demo {public static void main(String[] args) {TreeMap<Student,String> map = new TreeMap<>(/*new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {int temp = o2.getName().compareTo(o1.getName());return temp==0 ? o2.getAge()-o1.getAge() : temp;}}*/);map.put(new Student("zhangsan",21),"北京");map.put(new Student("lisi",23),"上海");map.put(new Student("wangwu",25),"广东");map.put(new Student("lisi",23),"新疆");map.forEach((stu,str)->{System.out.println(stu.getName()+":"+stu.getAge()+"——"+str);});}
}

7.代码示例

要求:统计字符串中每个字符出现的次数

        //录入字符串Scanner sc = new Scanner(System.in);String s = sc.nextLine();//将字符串转成字符数组char[] cc = s.toCharArray();//创建Map集合Map<Character,Integer> map = new TreeMap<Character,Integer>();//依次判断Map集合中是否有该字符for(char c : cc) {Integer i = map.get(c);if (i==null) {map.put(c,1);}else {i++;map.put(c,i);}}//创建字符串缓冲区StringBuilder sb = new StringBuilder();//遍历Map集合并将键值录入字符串缓冲区Set<Map.Entry<Character, Integer>> entries = map.entrySet();for (Map.Entry<Character, Integer>me : entries) {sb.append(me.getKey()).append("(").append(me.getValue()).append(")");}//输出内容System.out.println(sb.toString());}

Java基础——常用对象API(4):集合框架5:Map集合相关推荐

  1. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合

    I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...

  2. hashset java api_java常用对象API中集合框架之HashSet

    之前在<java常用对象API之集合框架>这篇文章中已经将所有集合框架做了一个总体的大纲陈列,并阐述了所有Collection接口下的子接口和类的作用解释,那么接下来的文章智言还是想把里面 ...

  3. (Java集合框架)Map集合

    Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...

  4. 黑马毕向东Java课程笔记(day16-1-16-9):集合类(集合框架)——Map集合

    1.Map集合   Map集合的基本特点如下: 接口 Map<K,V>:将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.(但是值可以重复) K - 此映射所维护的 ...

  5. Java基础 - 集合框架(5) : Map集合、Collections

    1. Map集合的概述和特点 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 2. Map和Collection的区别 ? A. Map 存储的是键值对形式的元素,键唯一,值 ...

  6. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

  7. 集合框架(一) ----------Map集合遍历的方法

    import java.util.*; /** * Map集合遍历的方法 * @author Administrator * */ public class Test2 { public static ...

  8. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器...

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  9. 【夯实Java基础】(三)史上最全集合框架归纳总结

    文章目录 集合框架的大体结构 详解主要类及接口 第一章 Collection集合 1.1 集合概述 1.2 集合框架 1.3 Collection 常用功能 第二章 Iterator迭代器 2.1 I ...

  10. Java中常用的API

    文章目录 前言 一.java.lang String StringBuilder Integer parseXXX Math Object System Throwable Thread Runnab ...

最新文章

  1. LINUX下的21个特殊符号 转
  2. 网络推广专员教大家网站SEO优化中锚文本的使用技巧
  3. Android系统所有版本源码Kernel源码
  4. Super SloMo神经网络生成极慢视频(PyTorch实现)
  5. word技巧 很有用~
  6. 用 matlab 爬取期刊影响因子
  7. python遗传算法计算实例_遗传算法python简单例子(详解)
  8. UIImage 剪裁的方法
  9. 二维均匀分布的边缘密度函数_理解概率密度函数
  10. python免费课程400节-太原Python编程课哪家比较有优势
  11. 一些基础的java编程代码
  12. Spark2.1.1中用各种模式运行计算圆周率的官方Demo
  13. eclipse使用git合并_Eclipse的git插件冲突合并方法
  14. JQUI 的一个小问题
  15. Echarts 环图 颜色渐变、灰色背景、自适应
  16. HTML创建简单动态时钟
  17. 印度影星沙鲁克-罕简介
  18. MSP与PGMP的关联性与区别
  19. 想要学习丙烯画,这些地方要注意了~
  20. arduino智能浇花系统_基于Arduino的远程自动浇花系统设计

热门文章

  1. es6学习推荐网址(阮一峰)
  2. ssm教务排课系统MVC学校专业选修课程安排选课信息jsp源代码数据库mysql
  3. 发起成立“ABCD联盟”,人工智能与区块链技术研讨会北京站精彩回顾
  4. poi html转换成word文档,poi将html转换为word文档
  5. 一个受人称赞的站点应该用最实新的策略来优化
  6. MAC IDEA常用快捷键
  7. nodejs生成pdf文件
  8. C语言代码绘制,利用数组输出 0-2Π之间的 sin 函数图像和 cos 函数图像,实验报告及代码。
  9. JavaPDF文件转图片
  10. EURA欧瑞E1000系列变频器使用PID实现恒压供水功能的相关参数设置及接线