Java基础——常用对象API(4):集合框架5:Map集合
文章目录
- 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集合特点
- Map集合的特点都是由键决定
- 键值无序,不重复,无索引的。后面重复的键会覆盖前面的整个元素。
- 值无要求
- 键值对都可以为null
3.Map常用子类
HashTable:内部结构是哈希表,同步。不允许null作为键,不允许null作为值。
—Properties:用来存储键值对型的配置文件的信息,可以和IO技术结合。HashMap:内部结构是哈希表,不同步。允许null作为键,允许null作为值。
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()
用entrySet()方法,把Map集合转成Set集合,集合里的对象类型为:Map.entry<K,V>
用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集合相关推荐
- java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...
- hashset java api_java常用对象API中集合框架之HashSet
之前在<java常用对象API之集合框架>这篇文章中已经将所有集合框架做了一个总体的大纲陈列,并阐述了所有Collection接口下的子接口和类的作用解释,那么接下来的文章智言还是想把里面 ...
- (Java集合框架)Map集合
Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...
- 黑马毕向东Java课程笔记(day16-1-16-9):集合类(集合框架)——Map集合
1.Map集合 Map集合的基本特点如下: 接口 Map<K,V>:将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.(但是值可以重复) K - 此映射所维护的 ...
- Java基础 - 集合框架(5) : Map集合、Collections
1. Map集合的概述和特点 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 2. Map和Collection的区别 ? A. Map 存储的是键值对形式的元素,键唯一,值 ...
- 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))
1.Map集合概述和特点 1.需求: 根据学号获取学生姓名 2.Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能 ...
- 集合框架(一) ----------Map集合遍历的方法
import java.util.*; /** * Map集合遍历的方法 * @author Administrator * */ public class Test2 { public static ...
- -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器...
集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别? A:长度区别 ...
- 【夯实Java基础】(三)史上最全集合框架归纳总结
文章目录 集合框架的大体结构 详解主要类及接口 第一章 Collection集合 1.1 集合概述 1.2 集合框架 1.3 Collection 常用功能 第二章 Iterator迭代器 2.1 I ...
- Java中常用的API
文章目录 前言 一.java.lang String StringBuilder Integer parseXXX Math Object System Throwable Thread Runnab ...
最新文章
- LINUX下的21个特殊符号 转
- 网络推广专员教大家网站SEO优化中锚文本的使用技巧
- Android系统所有版本源码Kernel源码
- Super SloMo神经网络生成极慢视频(PyTorch实现)
- word技巧 很有用~
- 用 matlab 爬取期刊影响因子
- python遗传算法计算实例_遗传算法python简单例子(详解)
- UIImage 剪裁的方法
- 二维均匀分布的边缘密度函数_理解概率密度函数
- python免费课程400节-太原Python编程课哪家比较有优势
- 一些基础的java编程代码
- Spark2.1.1中用各种模式运行计算圆周率的官方Demo
- eclipse使用git合并_Eclipse的git插件冲突合并方法
- JQUI 的一个小问题
- Echarts 环图 颜色渐变、灰色背景、自适应
- HTML创建简单动态时钟
- 印度影星沙鲁克-罕简介
- MSP与PGMP的关联性与区别
- 想要学习丙烯画,这些地方要注意了~
- arduino智能浇花系统_基于Arduino的远程自动浇花系统设计
热门文章
- es6学习推荐网址(阮一峰)
- ssm教务排课系统MVC学校专业选修课程安排选课信息jsp源代码数据库mysql
- 发起成立“ABCD联盟”,人工智能与区块链技术研讨会北京站精彩回顾
- poi html转换成word文档,poi将html转换为word文档
- 一个受人称赞的站点应该用最实新的策略来优化
- MAC IDEA常用快捷键
- nodejs生成pdf文件
- C语言代码绘制,利用数组输出 0-2Π之间的 sin 函数图像和 cos 函数图像,实验报告及代码。
- JavaPDF文件转图片
- EURA欧瑞E1000系列变频器使用PID实现恒压供水功能的相关参数设置及接线