Map接口---Day20
Map接口概述:
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等, 这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口
Map接口与Collection接口的区别:
Collection 中的集合,元素是孤立存在的(可以理解为单身),向集合中存储元素采用一个个元素的方式存储。
Map 中的集合,元素是成对存在的(可以理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的 值。
Collection 中的集合称为单列集合, Map 中的集合称为双列集合。
需要注意的是,Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map常用子类:
HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需 要重写键的hashCode()方法、equals()方法。
LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链 表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的 hashCode()方法、equals()方法。
Map接口中的常用方法
Map接口中定义了很多方法,常用的如下:
public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的 值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
package demosummary.map; import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
*
* public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
*
* public V remove(Object key) : 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
*
* public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
*
* public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
*/
public class MapMethods {
public static void main(String[] args) {
/**
* public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
*/
//创建map集合
HashMap<String, String> map = new HashMap<>();
//添加元素
map.put("蛮王", "艾希");
map.put("盖伦", "卡特琳娜");
map.put("卡牌", "寡妇");
//打印map集合
System.out.println(map);//{卡牌=寡妇, 蛮王=艾希, 盖伦=卡特琳娜} /**
* public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
*/
String result = map.get("蛮王");
System.out.println(result);//艾希 /**
* public V remove(Object key) : 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
*/
String result1 = map.remove("蛮王");
System.out.println(result1);//艾希
System.out.println(map);//{卡牌=寡妇, 盖伦=卡特琳娜} /**
* public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。
*/
Set<String> set = map.keySet();
System.out.println(set);//[卡牌, 盖伦] /**
* public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
*/
Set<Map.Entry<String, String>> set1 = map.entrySet();
System.out.println(set1);//[卡牌=寡妇, 盖伦=卡特琳娜] }
}
注意:使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到 集合中;若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
Map集合遍历键找值方式
键找值方式:即通过元素中的键,获取键所对应的值
分析步骤:
1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示: keyset()
2. 遍历键的Set集合,得到每一个键。
3. 根据键,获取键所对应的值。方法提示: get(K key)
package demosummary.map; import java.util.HashMap;
import java.util.Set; public class MapFor {
/**
* 键找值方式:即通过元素中的键,获取键所对应的值
* 分析步骤:
* 1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示: keyset()
* 2. 遍历键的Set集合,得到每一个键。
* 3. 根据键,获取键所对应的值。方法提示: get(K key)
*/
public static void main(String[] args) {
//创建map集合
HashMap<String, String> map = new HashMap<>();
//添加元素
map.put("蛮王", "艾希");
map.put("德玛", "卡特琳娜");
map.put("卡牌", "寡妇");
//获取键
Set<String> keys = map.keySet();
//遍历键
for (String key : keys) {
//通过键获取值
String s = map.get(key);
System.out.println(s);
/**
* 运行结果
* 寡妇
* 卡特琳娜
* 艾希
*/
}
}
}
Entry键值对对象
我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在 Map 中是一一对应关 系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这 样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。
方法:
public K getKey() :获取Entry对象中的键。
public V getValue() :获取Entry对象中的值。
在Map集合中也提供了获取所有Entry对象的方法:
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
操作步骤与图解:
1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示: entrySet() 。
2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示: getkey() getValue()
package demosummary.map; import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class MapEntry {
public static void main(String[] args) {
//创建map集合
HashMap<String, String> map = new HashMap<>();
//添加元素
map.put("蛮王", "艾希");
map.put("德玛", "卡特琳娜");
map.put("卡牌", "寡妇");
//获取entry对象
Set<Map.Entry<String, String>> entrySet = map.entrySet();
//遍历得到entry对象
for (Map.Entry<String, String> es : entrySet) {
String key = es.getKey();
String value = es.getValue();
System.out.println(key + "的CP是" + value);
/**
* 执行结果
* 卡牌的CP是寡妇
* 德玛的CP是卡特琳娜
* 蛮王的CP是艾希
*/
}
}
}
HashMap存储自定义类型键值
package demosummary.map; import java.util.HashMap;
import java.util.Objects;
import java.util.Set; public class MapStudent {
private String name;
private Integer age; public MapStudent() {
} public MapStudent(String name, Integer age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MapStudent that = (MapStudent) o;
return Objects.equals(name, that.name) &&
Objects.equals(age, that.age);
} @Override
public int hashCode() {
return Objects.hash(name, age);
} @Override
public String toString() {
return "MapStudent{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public static void main(String[] args) {
//创建HashMap集合对象
HashMap<MapStudent, String> map = new HashMap<>();
//添加元素
map.put(new MapStudent("A", 20),"北京");
map.put(new MapStudent("B", 21),"上海");
map.put(new MapStudent("C", 22),"深圳");
map.put(new MapStudent("D", 20),"广州");
//获取keySet对象
Set<MapStudent> ms = map.keySet();
//遍历得到的Key
for (MapStudent m : ms) {
String s = map.get(m);
System.out.println(s);
}
/**
* 执行结果
* 广州
* 北京
* 上海
* 深圳
*/
}
}
LinkedHashMap
LinkedHashMap可以保证存进去的元素有序,因为在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构
package demosummary.map; import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set; public class LinkedMapDemo {
public static void main(String[] args) {
//创建LinkedHashMap集合
LinkedHashMap<String, String> map = new LinkedHashMap<>();
//添加元素
map.put("蛮王", "艾希");
map.put("德玛", "卡特琳娜");
map.put("卡牌", "寡妇");
//获取entrySet对象
Set<Map.Entry<String, String>> me = map.entrySet();
//遍历获取的键
for (Map.Entry<String, String> sse : me) {
System.out.println(sse.getKey()+"=="+sse.getValue());
}
/**
* 执行结果
* 蛮王==艾希
* 德玛==卡特琳娜
* 卡牌==寡妇
*/
}
}
Map接口---Day20的更多相关文章
- [Day20]Map接口、可变参数、Collections
1.Map接口-元素成对存在,每个元素由健与值两部分组成,通过键可以找所对应的值 1.1 Map子类 (1)HashMap<K,V>:存储数据所用的哈希表结构,元素的存取数据顺序不能保证一 ...
- java中集合类中Collection接口中的Map接口的常用方法熟悉
1:Map接口提供了将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.Map接口中同样提供了集合的常用方法. 2:由于Map集合中的元素是通过key,value,进行存储的,要 ...
- 第19章 集合框架(3)-Map接口
第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...
- Map接口使用注意事项
1,Map接口对象本身不能直接使用迭代进行输出的.因为map每个位置存放的是一对值. 而iterator每次只能找到一个值.如果一定要迭代输出,可以通过以下步骤.: 但是,Map接口只作为查找使用,输 ...
- Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。
Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...
- List接口、Set接口、Map接口的方法
一.Collection接口中的方法介绍 int size();返回此Collection中的元素数 boolean isEmpty(); 判断是否为空 boolean containsAll(Col ...
- Java集合中Map接口的使用方法
Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值 ...
- JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
随机推荐
- Linux权限设置基础
chmod linux系统中文件或目录有两个属性:访问权限和文件所有者,简称“权限”和“归属”. 访问权限包括:读取.写入.可执行. 归属包括:属主(拥有该文件的用户).属组(拥有该文件的用户组) ...
- Mock.js数据模拟
数据来源方式: 为什么要用mockjs 实际开发中,前后端分离,前端需要后端的接口去完成页面的渲染,但是并不能等到后端成员写完接口再开始进行测试.大部分情况下,前后端需要同时进行开发.因此便需要moc ...
- turtle模块
turtle(海龟)绘图用法 import turtle -->调出turtle库 setup()-->设置窗体大小和位置 turtle.setup(width,height,startx ...
- freeradius client 和jradius安装编译
freeradius client radtest只是用来调试的,radclient功能更强大.用法如下: From the man page we can see that radclient gi ...
- CCF虚拟现实与可视化技术专委会丨面向增强现实的可视计算技术研究进展概述
https://mp.weixin.qq.com/s/I-rNwgXHEtwgdpkWzKtVXw 摘要 新一代增强现实技术需要依赖可视计算理论与方法解决大尺度复杂环境下的场景建模.内容生成.感知交互 ...
- flex布局整理以及demo
flex: 概念: flex容器: display:flex flex项: 轴:水平的主轴.垂直的交叉轴 容器的属性: 1. flex-direction(决定主轴的方向.即项目的排列方向) 1.1 ...
- 洛谷P3084 [USACO13OPEN]照片
题目 \(DP\) 设状态\(dp[i]\)为\(i\)位置放了斑点牛,前\(i\)个位置能得到的最多的牛. 有方程\(dp[i]=max(dp[j]+1,dp[i])\),而我们并不知道什么\(j\ ...
- haproxy 配置文件详解 之 frontend
配置示例: frontend www bind *: mode http option httplog option forwardfor option httpclose log global #a ...
- [300iq Contest 1-D]Dates
传送门 Description 每个妹子匹配一个时间区间,每个时间最多选择\(a_i\)个妹子,每个妹子有一个快乐值,最大化总快乐值 Solution 贪心,从大往小取,能取则取 判断是否可以有完美匹 ...
- CF 494E Sharti
CF 494E Sharti 题意:一个\(n \times n\)的棋盘,共有m个矩形中的格子为白色.两个人需要博弈,每次操作选择一个边长不超过k的正方形并翻转颜色,每次翻转需要正方形的右下角为白色 ...