简书作者:达叔小生

Java当中的集合框架Map

01

Map提供了三个集合视图:

  1. 键集
  2. 值集
  3. 键-值 映射集
public String getWeek(int num){
if(num<0 || num>7){
throw new NoWeekException(num+"没有对应的星期");
String[] weeks = {"","星期一"...."星期日"};
return weeks[num];
}
}

Sunday(星期天)、Monday(星期一)、Tuesday(星期二)、Wednesday(星期三)、Thursday(星期四)、Friday(星期五)、Saturday(星期六)

java.util
接口 Map<K,V>
参数:
K为此映射的键
V为此映射的值

知道的子接口:

Bindings,ConcurrentMap<K,V>,ConcurrentNavigableMap<K,V>,LogicalMessageContext,MessageContext,NavigableMap<K,V>,SOAPMessageContext,SorteMap<K,V>

知道的实现类:

AbstractMap,Attributes,AuthProvider,ConcurrentHashMap,ConcurrentSkipListMap,EnumMap,HashMap,Hashtable,IdentityHashMap,LinkedHashMap,PrinterStateReasons,Properties,Provider,RenderingHints,SimpleBindings,TabularDataSupport,TreeMap,UIDefaults,WeakHashMap

实现的接口:

public interface Map<K,V>

在映射中不能有重复的键,每个键只能映射在一个值上

Map集合中的特点:

  1. 内部存储的模式是以键-值对的形式
  2. Map中的键要具有唯一性

嵌套类(内部的):

方法 说明
Map.Entry<K,V> static interface,静态 接口,映射模式键-值对

Map方法:

方法 说明
clear() 类型为void,在映射中移除所有的映射关系
containsKey(Object key) 返回boolean类型,如果映射中包含指定的键的映射关系,返回为true,反之为false
containsValue(Object value) 返回boolean类型,如果映射中一个或多个键映射到指定的值上,返回为true,反之为false
entrySet() 返回类型为Set<Map.Entry<K,V>> 返回此映射中包含的映射关系
equals(Object o) 返回类型为boolean,比较指定对象与映射是否相等
get(Object key) 返回值,返回指定键所映射的值,如果此映射不包含该键的映射关系,返回为null,代表没有
hasCode() 返回为Int类型,返回此映射的哈希码值
isEmpty() 返回类型为boolean,如果此映射没有键-值的映射关系,返回为true,反之为false
keySet() 返回类型为Set<E>,返回此映射中包含的所有键的Set视图
put(K key, V value) 将对应的键与值,建立映射关系,添加映射关系的方法
putAll(Map<? extends K, ? extends V> m) 返回类型为void,从指定的映射关系中将所有的映射关系复制到此映射中
remove(Object key) 如果存在这个键的映射关系就将其移除
size() 返回类型为Int类型,返回此映射关系中的键-值映射关系的数目
values() 返回类型为Collection<V>,返回此映射中包含的值的Collection视图

put

V put (E key, V value)

将对应的键与值,建立映射关系,添加映射关系的方法,如果之前就有这个映射关系,就会将指定的值替换掉旧的值。

参数:

key - 为指定的关联的键

value - 为指定的关联的值

会抛出的错误:

UnsupportedOperationException:不支持put操作
ClassCastException:不允许用映射关系
NullPointerException:将指定的键或者值为null,而此映射却不允许存储
IllegalArgumentException:指定的键或者值不允许存储到映射中

一般用的实现类:

HashMap

java.util
类 HashMap<K,V>
java.lang.Object
-> java.util.AbstractMap<K,V>
-> java.util.HashMap<K,V>

参数:

K-为所对应的键
V-为所对应的值

已实现的接口:

Serializable,Cloneable,Map<K,V>

已知的子类:

LinkedHashMap,PrinterStateReasons

所以:

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

02

Map例子:

import java.util.HashMap;
public class MapDemo {
public static void main(String[] args){
// 建立map
Map<String,String> map = new HashMap<String,String>();
// 添加元素
map.put("星期一", "Monday");
mpa.put( ...// 自行添加 );
map.put("星期日", "Sunday");
// 添加元素时,如果键相同,值会覆盖
map.put("星期日", "SundayDemo"); // 值被覆盖
// 获取值
String value = map.get("星期日"); // 键存在,返回值,反之返回null,为空
// 删除元素
String s = map.remove("星期日"); // 删除对应的键值对关系,这样在Map集合中就少了这一对键值对
}
}

如何获取所有的键

Map<String,String> map = new HashMap<String,String>();
map.put("星期一", "Monday");
map.put("星期日", "Sunday");

使用keySet

Set<String> keySet = map.keySet();
for(Iterator<String> it = keySet.iterator(); it.hasNext(); ){
String key = it.next();
String value = map.get(key);
System.out.println(key + " : " + value);
}

可以使用foreach循环

for(String key : keySet){
System.out.println(key + " = " + map.get(key));
}

entrySet

Set<Map.Entry<K,V>> entrySet()

作用为返回此映射中包含的映射关系Set的视图,将map集合中映射关系存储到set集合中。

映射关系:指键和值对应的关系,数据类型Map.Entry(内部的)关系的类型

Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator< Map.Entry<String,String> > it = entrySet.iterator();
while(it.hasNext(K,V)){
Map.Entry<String,String> m = it.next();
// 获取键
String key = m.getKey();
// 获取值
String value = m.getValue();
System.out.println(key + " : " + value);
}

Map.Entry<K,V>

java.util
接口 Map.Entry<K,V>

接口实现类:

AbstractMap.SimpleEntry , AbstractMap.SimpleImmutableEntry

接口:

public static interface Map.Entry<K,V>
// 为映射项 - 键-值 对

Map.Entry<K,V>方法

方法:

方法 说明
equals(Object o) 返回类型为boolean,比较指定对象与此项的相等性
getKey() 返回为此项对应的键
getValue() 返回为此项对应的值
hashCode() 返回类型为int,返回为此项的哈希码值
setValue(V value) 用指定的值去换此项对应的值
for(Map.Entry<String,String> m : map.entrySet()){
String key = m.getKey();
String value = m.getValue();
System.out.println(key + " : " + value);
}
interface Map{
public static interface Entry();
}

values()

返回类型为Collection<V>,返回此映射中包含的值的Collection视图

Collection<String> values = map.values();
for(String value : values){
System.out.println("value:"+value);
}

总结:Map -> entrySet() getKey() getValue() -> keySet() get(key) -> values()

03

Hashmap

public class HashMapDemo {
public static void main(String[] args){
Map<Student,String> map = new HashMap<Student,String>();
// 添加元素
map.put(new Student("da",12), "1");
map.put(new Student("shu",13), "2");
map.put(new Student("dashu",14), "3");
// 取出数据
// Set<Student> keySet = map.keySet();
// for(Student key : keySet){}
for(Student key : map.keySet() ){
String value = map.get(key);
System.out.println(key.toString() + " : " + value);
}
}
}
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student(){
super();
}
public Student(String name, int age){
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age){
this.age = age;
}
@Override
public String toString() {
return "Student [name = " + name +",age = " + age + "]";
}
@Override
public int hasCode() {
final int prime = 31;
int result = 1;
result = prime + result + age;
result = prime + result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj){
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass() )
return false;
Student other = (Student) obj;
if(age != other.age)
return false;
if(name == null){
if(other.name != null)
return false;
}else if(!name.equals(other.name))
return false;
return true;
}
@Override
public int compareTo(Student o){
int temp = this.age - o.age; return temp == 0? this.name.compareTo(o.name) : temp;
}
}

TreeMap

public class TreeMapDemo{
public static void main(String[] args){
Map<Student, String> map = new TreeMap<Student, String>(new ComparatorByName());
// 添加元素
map.put(new Student("da",12), "1");
map.put(new Student("shu",13), "2");
map.put(new Student("dashu",14), "3");
// 取出数据
for(Map.Entry<String,String> m : map.entrySet()){
Student key = m.getKey();
String value = m.getValue();
System.out.println(key + " : " + value);
}
}
}
public class ComparatorByName implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2){
int temp = o1.getName().compareTo(o2.getName());
return temp == 0 ? o1.getAge() - o2.getAge() : temp;
}
}

04

实例:

public class CollectionsDemo {
public static void main(String[] args) {
Map m = new HashMap();
m.put("da", "8");
m.put("shu", "9");
m.put("dashu", "10");
m.put("dashucoding", "12");
System.out.println(m);
}
}

Java Map 集合类

最常用的集合类就是ListMapList的实现类包括ArrayListVector,可以变大小的列表,适合构建,存储,和操作任何类型对象元素的列表。

Map是比较通用的,Map集合类是用于存储元素对的,为键-值对,每个键映射到一个值,从理解上可以将List看作数值键的Map,但两者没有什么关系。

所有键值对 — entrySet()

所有键 — keySet()

值 — values()

Iterator keyValues = map.entrySet().iterator();
Iterator keys = map.keySet().iterator();
Iterator values = map.values().iterator();

entrySet():返回 Map 中所包含 映射 的 Set 视图。

keySet():返回 Map 中所包含 键 的 Set 视图。

values():返回 Map 中所包含 值 的 Collection 视图。

往后余生,唯独有你

简书作者:达叔小生

90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通

简书博客: https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

第51节:Java当中的集合框架Map的更多相关文章

  1. Java当中的集合框架Map

    简书作者:达叔小生 Java当中的集合框架Map 01 Map提供了三个集合视图: 键集 值集 键-值 映射集 public String getWeek(int num){ if(num<0 ...

  2. 第48节:Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  3. Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  4. Java中的集合框架-Map

    前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从 ...

  5. Java中的集合框架-Collections和Arrays

    上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...

  6. 菜鸟日记之 java中的集合框架

    java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...

  7. Java基础--说集合框架

    版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...

  8. Java中的集合框架(上)

    Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...

  9. Java中的集合框架-Collection(二)

    上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...

随机推荐

  1. 关于接口测试工具postman与DHC介绍

    一.Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介 ...

  2. centos 上docker 运行出现/bin/sh: . not found

    本人用的是Linux上的编译的....然后用了win上的编译命令 解决办法 : 用Linux上的编译命令.....    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 g ...

  3. centos 下使用vscode 调试egg.js 注意事项

    这两天在centos下,直接用vscode运行egg.js的例子.遇到个问题就是当安装了vscode-egg插件,会遇到一个现象.就是同样的代码,Windows下调试可以顺利进行,但是centos有时 ...

  4. [精华][推荐]CAS SSO 单点登录框架学习 环境搭建

    1.了解单点登录  SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...

  5. js兼容公用方法

    var utils = (function(){ //把类数组转换为数组(兼容所有的浏览器) function toArray(classAry){ var ary = []; try { ary = ...

  6. java学习(四)

    学号 20189214 <Java程序设计>第四周学习总结 教材学习内容总结 枚举 枚举是JDK1.5版本新增的特性(泛型.For-each等如今被广泛应用的特性也是由JDK1.5时所新增 ...

  7. 重启rabbitmq服务

    重启rabbitmq服务通过两个命令来实现: rabbitmqctl stop :停止rabbitmq rabbitmq-server restart : 重启rabbitmq 因为rabbitmqc ...

  8. Object.defineProperty(obj,prop,descriptor)使用

    初步实现了数据自动映射到html中,动态修改对象数据也很自动更新到html.提供addProps方法-添加新增属性并初始化自动监听代码如下: 1.abserve.js:包含数据监听实现.类似jquer ...

  9. 优雅的找出ArrayList中重复的元素

    https://blog.csdn.net/caoxiaohong1005/article/details/54286384

  10. 20155312 张竞予 Exp3 免杀原理与实践

    Exp3 免杀原理与实践 目录 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法有哪些? 实验总结与体会 实践过程记录 正确使用msf编码器,msfveno ...