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接口并不 ...
随机推荐
- 在windows下安装Superset
前言 最近想用一下Superset,这个是一个开源项目,可以直接通过写sql来生成图表,有时候对一些图表需求比较多的时候,可以用的上. Superset是由Airbnb(知名在线房屋短租公司)开源BI ...
- 朱石景 201671010457 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(四)
未完待续 ........ 前言: 加班了好几天,终于结束上一个坑的项目了,项目交接人员全部离职,代码一行注释没有,无人问津的情况下,完成了项目,所以好的规范真的很重要. 继续日期改写 一 ...
- HBaseAPI
环境准备 新建项目后在pom.xml中添加依赖: <dependency> <groupId>org.apache.hbase</groupId> <arti ...
- JLOI 2009 二叉树问题
洛谷 P3884 [JLOI2009]二叉树问题 洛谷传送门 JDOJ 2024: [JLOI2009]二叉树问题 JDOJ传送门 Description 如下图所示的一棵二叉树的深度.宽度及结点间距 ...
- 7.Go退出向Consuk反注册服务,优雅关闭服务
注册和反注册代码 package utils import ( consulapi "github.com/hashicorp/consul/api" "log" ...
- c# 关于反射
反射的用途大体总结:1.使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从程序集中查找类型并创建该类型的实例.CreateInstance2.使用Module了解包含模块的程序集 ...
- Scrapy的中间件(二)
爬虫中间件 爬虫中间件的用法与下载器中间件非常相似,只是它们的作用对象不同.下载器中间件的作用对象是请求request和返回response:爬虫中间件的作用对象是爬虫,更具体地来说,就是写在spid ...
- 用!htrace调试句柄泄漏的一般步骤
Windbg调试器的!htrace扩展对于调试泄漏处理非常方便.该过程基本上可归结为以下简单步骤: 启用跟踪 拍张快照 情景分析 显示差异 在第四步!htrace将在最后一个快照之后显示所有额外打开的 ...
- GIL全局解释锁
目录 一 介绍 二 GIL介绍 三 GIL与多线程 四 多线程性能测试 一 介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is ...