java中的map是什么_转载java中Map的详解
Map简介
什么是map?
map是一个接口 是一个将建key 映射到值的对象。
map的主要作用是什么?
可以通过创建一个map的实现类 来存放 数据 值 和值的描述 也可以通过描述去取得数据
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如HashMap 类。
注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包 含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。
所有通用的映射实现类应该提供两个“标准的”构造方法:一个 void (无 参数)构造方法,用于创建空映射;一个是带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽 管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。
此接口中包含的“破坏”方法可修改其操作的映射,如果此映射不支持该操作,这些方法将抛出 UnsupportedOperationException。如果是这样,那么在调用对映射无效时,这些方法可以(但不要求)抛出 UnsupportedOperationException。例如,如果某个不可修改的映射(其映射关系是“重叠”的)为空,则对该映射调用 putAll(Map) 方法时,可以(但不要求)抛出异常。
某些映射实现对可能包含的键和值有所限制。例如,某些实现禁止 null 键和值,另一些则对其键的类型有限制。尝试插入不合格的键或值将抛出一个未经检查的异常,通常是 NullPointerException 或 ClassCastException。试图查询是否存在不合格的键或值可能抛出异常,或者返回 false;某些实现将表现出前一种行为,而另一些则表现后一种。一般来说,试图对不合格的键或值执行操作且该操作的完成不会导致不合格的元素被插入映射 中时,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。
此接口是 Java Collections Framework 的成员。
Collections Framework 接口中的很多方法是根据 equals 方法定义的。例如,containsKey(Object key) 方法的规范中写道:“当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true”。不 应将此规范解释为:调用具有非空参数 key 的 Map.containsKey 将导致对任意的键 k 调用 key.equals(k)。实现可随意进行优化,以避免调用 equals,例如,可首先比较两个键的哈希码(Object.hashCode() 规范保证哈希码不相等的两个对象不会相等)。一般来说,只要实现者认为合适,各种 Collections Framework 接口的实现可随意利用底层 Object 方法的指定行为。
常用操作说明
void clear()
从此映射中移除所有映射关系(可选操作)。
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
Set> entrySet()
返回此映射中包含的映射关系的 Set 视图。
boolean equals(Object o)
比较指定的对象与此映射是否相等。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int hashCode()
返回此映射的哈希码值。
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true。
Set keySet()
返回此映射中包含的键的 Set 视图。
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size()
返回此映射中的键-值映射关系数。
Collection values()
返回此映射中包含的值的 Collection 视图。
Map的一般用法
1.声明一个Map :
Map map = new HashMap(); 多态的使用 父类引用指向子类对象
2 .向map中放值 ,注意: map是key-value的形式存放的,如:
map.put("sa","dd");
3 .从map中取值 :
String str = map.get("sa").toString,
结果是: str = "dd'
4 .遍历一个map,从中取得key和value :
Map m= new HashMap();
for(Object obj : map.keySet()){
Object value = map.get(obj );
}
map 的使用
/**
* 创建Map 约束数据类型
*/
Map map=new HashMap();
/*
* put方法往Map中存放数据
*/
Integer i=map.put("数学", 90);
System.out.println(i);
map.put("语文", 96);
map.put("英语", 80);
map.put("语文2", 96);
map.put("英语2", 80);
map.put("语文1", 96);
map.put("英语1", 80);
int ii=map.put("数学", 80);
System.out.println(ii);
System.out.println(map);
/**
* 从map中获取元素
* V get(key)
*/
Integer mun=map.get("语文");
System.out.println(mun);
/**
* 如果key不存在,返回null
* 此时不能用int类型来接受
* null不能调用intValue()方法实现自动拆箱
* 报空指针异常
*/
//int ii2=map.get("高数");
//System.out.println(ii);
/**
* 判断Map中是否包含制定Key
*/
if(map.containsKey("数学")){
System.out.println("包含");
}else System.out.println("不包含");
/**
* 删除某一元素
*/
System.out.println(map);
Integer ii2=map.remove("语文1");
System.out.println("删除元素的值:"+ii2);
System.out.println(map);
/** * 遍历Map的三种方式 *
1.变量所有的Key
*
* 2.一行一行的便利键值对
*
* 3.便利所有的value
*/
public class 遍历Map {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map map=new HashMap();
map.put("语文", 96);
map.put("英语", 80);
map.put("语文2", 96);
map.put("英语2", 80);
map.put("语文1", 96);
map.put("英语1", 80);
/**
* 1 Set keySet()
*/
Set keySet=map.keySet();
for(String str:keySet){
System.out.println(str);
str="gg";
}
for(String str:keySet){
System.out.println(str);
}
/**
* 2. Set entrySet();
* 遍历键值对
*/
Set> entrySet
=map.entrySet();
for(Entry e:entrySet){
System.out.println(e.getKey()+":"+e.getValue());
}
/**
* 3.遍历所有的value
*/
Collection cc=map.values();
for(Integer ii:cc){
System.out.println(ii);
}
}
java中的map是什么_转载java中Map的详解相关推荐
- niosii spi 外部_转载:NIOS II spi详解
NIOS II spi详解 1.说明 本文是依据笔者阅读<Embedded Peripherals (ver 9.0, Mar 2009, 4 MB).pdf>参考文档所作的个人理解,可以 ...
- java枚举类型有什么用_[转载] Java中枚举类型的使用 - enum
本文转载自博客 - Java枚举类型, 博主对原文内容及结构作了一定的修改. 1 枚举类的编译特性 从JDK 5开始, Java中多了一个关键字 -- enum: 可以将一组具有名称的值(包括Stri ...
- java比较两个word差异_[转载]java在线比较两个word文件
一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...
- java的按钮点击事件_[转载]java处理按钮点击事件
不同的事件源可以产生不同类别的事件.例如,按钮可以发送一个ActionEvent对象,而窗口可以发送WindowEvent对象. AWT时间处理机制的概要: 1.监听器对象是一个实现了特定监听器接口( ...
- python中正负号怎么表示_[转载]python中整数除法的正负号
先看下面几个小题目:其中符号"//"表示除法结果的整数部分(即3/2=1.5,但3//2=1),"%"表示取余数. (1)7//3 和 7%3 的结果是什么? ...
- java构造块_java中的静态代码块、构造代码块、构造方法详解
运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...
- Java中常见RuntimeException与其他异常表及Exception逻辑关系详解
Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...
- java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解
java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 发布于 2020-4-7| 复制链接 摘记: java ant包中的org.apache.tools.zip实现 ...
- java中isblank 方法_StringUtils中的isEmpty、isNotEmpty、isBlank和isNotBlank的区别详解
一.StringUtils中的isEmpty方法 1.StringUtils中的isEmpty方法中的源码如下: 注:由源码可知(判断某字符串是否为空,为空的标准是str==null或str.leng ...
最新文章
- linux sudo 实现原理
- 安卓惯性传感器(一)
- 两个列表合并去重_把两个pdf合并成一个如何解决?
- 将字符串转换成16进制
- iview的走马灯嵌套在模态框中,宽度为0的解决方案
- cass坡度土方计算案例_【九天教您南方cass 9.1】 12 道路断面土方计算
- 【记录】Docker安装后出现 Cannot connect to the Docker daemon
- MySQL学习(一)—初识MySQL
- Google 要放弃 Android 了?
- 一个可以实时查相关电子产品价格的网站
- 2016-2017-2(点集拓扑56, 点集拓扑56)
- 190317每日一句
- 计算机的使用知识,计算机基础知识计算机的使用方法
- Java DataStore 封装代码
- 传输层协议介绍(深入学习)
- 计算机技术在生物学中的应用鲁东大学,项目学习在高中生物学教学中的应用研究...
- 赵雯北京大学计算机动画系,北京大学艺术类、设计类考研辅导课程
- 11月最新系统GHOST XP SP3 电脑城快速装机版 V2011.11
- Chapter 3 Raster Images
- Windows 10创建用户
热门文章
- 2018年软工第一次作业
- Oracel官网下载各类版本的JDK
- 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动
- 如何利用数据分析找到女朋友?
- VS搭建lua开发环境和LuaBridge注册c++类(cocos2dx项目)(一)
- 20140418--第1讲.开山篇
- 后台代码和前台显示一样a href=' + URL + ' 使用转义字符
- Silverlight 中文教程第一部分: 使用Silverlight 2 和 VS 2008创建“Hello World”程序
- 北大阿里中科院提出细粒度人体姿态迁移方法,提升外观细节逼真度
- CV Code | 本周新出计算机视觉开源代码汇总(含自动驾驶目标检测、医学图像分割、风格迁移、语义分割、目标跟踪等)...