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接口并不 ...
随机推荐
- ubuntu 1804安装详解
我这边安装的是ubuntu server版本,大家安装时可以参考我这篇文件进行安装. 1.选择安装语言: 这里选择默认的"English"和“中文(简体)”都可以. 2.选择”安装 ...
- Mybatis-plus中如何排除非表字段的三种方式
1.transient关键字 2.使用静态变量(static) 3.TableField(exit=false) 这三种方式可以在使用的过程中,是这个对象中的属性不被序列化.(直接被忽略)
- WeUI教程/第三方扩展及其他UI框架对比
WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一.包含button.cell.dialog. progress. toa ...
- crystalreport使用方法
使用: 打开CrystalReport官网下载页 目前最新版本为13.0.4 选择“SAP Crystal Reports, version for Visual Studio 2010 - Stan ...
- 关于System.InvalidOperationException异常
什么是InvalidOperationException 操作无效异常.当方法调用对对象的当前状态无效时引发的异常. 继承 Object Exception SystemException Inval ...
- [RN] 阿里 ant-design 菜单比较丰富 https://github.com/ant-design/ant-design-mobile
阿里 ant-design 菜单比较丰富 https://github.com/ant-design/ant-design-mobile 天和风雨顺 地和五谷丰 人和事业旺 家和万事兴
- 请描述一下cookies、sessionStorage、localStorage、session四者的区别?
存储大小: cookie在4K以内. sessionStorage和localStorage在5M以内. 有效时间: cookie:如果未设置过期时间,关闭浏览器时清空:如果设置了有效时间则在到期后清 ...
- 【树状数组】【P3372】 【模板】线段树 1
Description 给定一个长度为 \(n\) 的序列,有 \(m\) 次操作,要求支持区间加和区间求和. Limitation \(1 \leq n,~m \leq 10^5\) 序列元素值域始 ...
- ORA-01589错误的解决办法
出现下图错误 使用下面解决办法,首先输入下面第一个箭头的语句,然后会弹出一个等待光标,接下来就是找到最新的那个REMOD0X.LOG文件地址,也就是第二个箭头所示. 再输入下面图片第一个箭头的语句.
- bzoj2839 集合计数 组合计数 容斥原理|题解
集合计数 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007.(是 ...