当前课程知识点:Java程序设计 >  第六章 对象群体的组织 >  6.7-Map接口及其实现 >  Map接口及其实现

返回《Java程序设计》慕课在线视频课程列表

Map接口及其实现在线视频

Map接口及其实现

下一节:第6章小结

返回《Java程序设计》慕课在线视频列表

Map接口及其实现课程教案、知识点、字幕

大家好

欢迎回来继续学习Java语言程序设计

这一节我们来学习Map接口

以及它的主要实现的类

Map接口代表的是这样一类集合

它们是用来存储一个个键值对

这样的数据群体的

通常如果我们希望

能通过关键字值

快速查找到它对应的

数据内容的时候

我们就会使用Map

Map接口它的抽象方法

主要有查询方法和修改方法

实现Map的两个主要的类

有HashTable和HashMap

HashTable也是老的Java版本里头的类型

那么现在更多的会使用HashMap

Map接口的查询方法

像这个size是返回Map中的元素个数

isEmpty判断是否空

containsKey判断参数

这个Key是否包含在这个Map里面

是否是Map中的一个关键字

containsValue判断这个参数

给出的这个Value值

是否包含在Map里面

作为某一个项的一个值

像get它的参数是给出了一个key

一个关键字

那么也就是要根据这个关键字

到Map中去查找它对应的值

并且返回这个值

这个Values方法

我们看到它返回一个Collection

它返回了包含所有值的

这么一个Collection对象

也就是把值全部都取出来了

keySet方法是返回

包含其中所有关键字

所有key的这么一个集合对象

一个Set对象

entrySet就返回包含Map中

所有项的这么一个Set对象

每个项它都包含

一个键和一个值

Map接口的修改方法

像包括这种put

它会将参数给的这个键和值

这一对数据

作为一个项添加到Map里面去

添加进去的时候

这个key不能

跟原来里面的key重复

而如果重复了呢

那就是用新的值

去取代原来在这个Map中

这个key对应的值

也就是说在这个Map中

key肯定必须是唯一的

putAll它是将这个参数Map对象

里面的所有项都加到消息接受者

也就是当前对象里面去

remove是按照指定的参数

给的这个关键字去找到相应的项

把那个项从Map里面删除

clear就是清空

删除Map中的所有的项

实现Map的两个非常常用的类

一个是HashTable一个是HashMap

HashTable是老版本Java里面的东西

现在用HashMap会更多一些

现在我们来简单的了解一下

数据结构中关于哈希表的这种概念

什么是哈希表

哈希表它存储对象的方式

比较特殊

也就是说在哈希表中

对象的存储位置

和对象它的关键字值之间

有一种特殊的对应关系

那么我们称这种特殊的对应关系

为哈希函数

也就是说我们给定一个关键字值

用哈希函数就可以计算出

它对应的存储位置

这样的话在我们向哈希表中

插入数据的时候

或者查找数据的时候

就都比较方便

不管你数据规模多大

只要你这个哈希函数

做的比较好比较合理

那它的查找时间就不随着

你数据规模的增大而增大

什么是说哈希函数

设计得比较好比较合理

就是说你得经过

这个哈希函数的计算以后

根据这个关键字的值

算出来它的存储位置

在当前的容器中

它应该是一个均匀分布的

应该尽量减少冲突

什么是冲突

就是不要说

我有两个不同的关键字值

你拿哈希函数一算

给我定位到同一个位置了

那这不就发生冲突了吗

当然绝对不发生冲突

有的时候是不可能的

为什么

有的时候如果为了节省空间

我们的容量要比较少

数据又比较多

这时候那发生冲突就成了必然的

那数据结构里面对发生冲突以后

怎么解决也有相应的

冲突的处理的策略

在这儿我们就不仔细去讲了

接下来我就来给大家介绍在Java中

我们会涉及到的哈希表的

几个主要的概念

那了解这些概念以后

对于我们理解这个哈希表

能够在程序中很好的应用它

是会有所帮助的

首先就是容量的概念

容量表示这个哈希表中

能够容纳多少个项

哈希表的容量它不是固定的

随着对象的加入在需要的时候

容量是可以自动扩充的

在数据结构中

哈希表这种结构

它可以用来存储一个一个的数据

一个个对象比如说

当然了HashMap

就可以存储用散列方式

来存储和定位数据的

这样的Map这样的映射

那么如果说是普通的集合

它的对象位置的定位

用哈希函数来定位的话

那么这个key关键字

可以是对象的本身

也可以是对象的某一个部分

比如说某一个属性

如果你存储的是HashMap

是映射的话

那么映射里面的每一个项

都有一个关键字和一个值

那么关键字就指的是那个关键字

哈希码的概念什么

我们如果要将对象

存到哈希表的结构中

那就需要将关键字

映射到一个整型的数据

其实这个整型的数据

就对应于对象

在这个表中的存储位置

那么这个整型数据

就称为这个关键字的哈希码

通常我们会用

这个关键字作为参数

调用哈希函数计算出哈希码来

那么哈希函数就是用来

返回对象的哈希码的

在映射在Map中我们有项这个概念

如果是哈希Map

那么它的每一个项都有两个域

一个是关键字还有一个是值

key和value都可以

是任意类的Object的对象

任意的Object对象

但是它都不能为空

关键字都应该是唯一的

在哈希表中还有

一个装填因子的概念

装填因子其实

就是表示了这个表中的

将要填入的项数

也就是你要存储多少数据吧

以及表的容量

它们之间的一个比值

如果说这个装填因子越大

就说明你要存的项数越多

容量越小

那么装填因子太大了

那肯定你存的项数都超过容量了

那肯定就会发生冲突

就要用一些解决冲突的算法

比如说链地址法

二次散列法去解决冲突

如果说你装填因子比较小

项数少而容量大

这种情况下

只要你的哈希函数

设计得比较好

那么就很少发生冲突

这样的存取效率就会更高一些

那接下来我们就来了解一下

在HashMap中都有哪些有用的方法

首先我们来看

它有这样一些不同的

承载形式的构造方法

默认的构造方法

它默认的容量是16

默认的装填因子是0.75

也可以在构造方法中我们给出容量

那它默认的装填因子是0.75

或者我们在构造方法中

既给出容量也给出

指定的装填因子也是可以的

还有可以用参数M

这个Map为初始值

来构造新的哈希Map

哈希Map中还有很多

其他的有用的方法

同样因为时间关系

我们就不在这个课程里

对这些方法

进行逐一的分析和讲解了

建议大家去查阅API文档

在这一节我们

简单的了解了一下Map接口

以及实现Map接口的

HashMap,HashTable

为了能让大家能够

对HashMap,HashTable

有比较清楚的了解

我对哈希表的这个结构的概念

在这里做了非常简单的一个介绍

那么大家要了解

更多的关于哈希表的内容

建议还是要

去学一下数据结构的课

对于哈希Map的更多

有用的函数的详细解释

希望大家去参考API的文档

这一节内容就是这些

Java程序设计课程列表:

第一章 Java语言基础知识

-1.0-导学

--1.0-导学

--JDK的安装与配置01

--JDK的安装与配置02

--JDK的安装与配置03

--编辑并执行第一个java程序01

--编辑并执行第一个java程序02

--编辑并执行第一个java程序03

--eclipse的安装和配置01

--eclipse的安装和配置02

--eclipse的安装和配置03

--使用eclipse进行Java的开发01

--使用eclipse进行Java的开发02

--使用eclipse进行Java的开发03

-1.1-Java与面向对象程序设计简介

--1.1.1 Java与面向对象程序设计简介

--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介

-1.2-基本数据类型与表达式

--1.2.1-基本数据类型与表达式

-第一章 Java语言基础知识--1.2-基本数据类型与表达式

-1.3-数组

--1.3.1-数组

-第一章 Java语言基础知识--1.3-数组

-1.4-算法的流程控制

--1.4.1-算法的流程控制

--第一章 Java语言基础知识--1.4-算法的流程控制

-1.5-第一章小结

--1.5.1-第一章小结

-第一章编程练习题

-课件

--外部链接

第一章续-习题讲解视频

-Java环境配置、Eclipse使用、Helloworld程序详解

--JAVA的安装和配置

--编写并执行第一个Java程序及Java的跨平台性

--eclipse的安装和配置

--使用eclipse建立Java项目、编写和运行Java程序

--Java注释和Eclipse中的注释操作

--详解HelloWorld程序

-Java数据类型

--Java数据类型介绍

--Java整数类型

--Java浮点类型

--Java字符类型和布尔类型

--数据类型实战

--数据类型转换

--Java强制类型转换精度损失示例与表达式中的数据类型转换

-Java数组

--Java数组介绍、声明与使用

--一维数组的初始化与length属性

--数组索引的原理与使用

--二维数组的介绍与使用

-Java变量

--Java的变量

-命令行参数

--命令行参数的介绍

第二章 类与对象

-2.0-导学

--2.0-导学

-2.1-面向对象方法的特性

--2.1-面向对象方法的特性

--第二章 类与对象--2.1-面向对象方法的特性

-2.2-1-类声明与对象创建

--2.2-1-类声明与对象创建

--第二章 类与对象--2.2-1-类声明与对象创建

-2.2-2-数据成员

--2.2-2-数据成员

--第二章 类与对象--2.2-2-数据成员

-2.2-3-方法成员

--2.2-3-方法成员

--第二章 类与对象--2.2-3-方法成员

-2.2-4-包

--2.2-4-包

--第二章 类与对象--2.2-4-包

-2.2-5-类的访问权限控制

--2.2-5-类的访问权限控制

--第二章 类与对象--2.2-5-类的访问权限控制

-2.3-1-对象初始化

--2.3-1-对象初始化

--第二章 类与对象--2.3-1-对象初始化

-2.3-2-内存回收

--2.3-2-内存回收

--第二章 类与对象--2.3-2-内存回收

-2.4-枚举类

--2.4-枚举类

--第二章 类与对象--2.4-枚举类

-2.5-应用举例

--2.5-应用举例

-2.6-第2章小结

--2.6-第2章小结

-第二章编程练习题

-课件

--第二章课件

第三章 类的重用

-3.0-导学

--3.0-导学

-3.1.1-3.1.2-类继承的概念和语法

--3.1.1-3.1.2-类继承的概念和语法

--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法

-3.1.3-隐藏和覆盖

--3.1.3-隐藏和覆盖

--第三章 类的重用--3.1.3-隐藏和覆盖

-3.2-Object 类

--3.2-Object 类

--第三章 类的重用--3.2-Object 类

-3.3-终结类与终结方法

--3.3-终结类与终结方法

--第三章 类的重用--3.3-终结类与终结方法

-3.4-抽象类

--3.4-抽象类

--第三章 类的重用--3.4-抽象类

-3.5-泛型

--3.5-泛型

--第三章 类的重用--3.5-泛型

-3.6-类的组合

--3.6-类的组合

-3.7-小结

--3.7-小结

-第三章编程练习题

-课件

--课件

第四章 接口与多态

-4.0-导学

--导学

-4.1-接口

--接口

--第四章 接口与多态--4.1-接口

-4.2.1-4.2.2-类型转换

--类型转换

--第四章 接口与多态--4.2.1-4.2.2-类型转换

-4.2.3-方法的查找

--方法的查找

--第四章 接口与多态--4.2.3-方法的查找

-4.3-多态的概念

--多态的概念

--第四章 接口与多态--4.3-多态的概念

-4.4-多态的应用举例

--多态的应用举例

--第四章 接口与多态--4.4-多态的应用举例

-4.5-构造方法与多态性

--构造方法和多态性

--第四章 接口与多态--4.5-构造方法与多态性

-4.6-本章小结

--本章小结

-第四章编程作业

-课件

--课件

第五章 输入输出

-5.0-导学

--5.0-导学

-5.1.1-5.1.2-异常处理的概念

--5.1.1-5.1.2-异常处理的概念

--第五章 输入输出--5.1.1-5.1.2-异常处理的概念

-5.1.3-5.1.5-异常的处理

--5.1.3-5.1.5-异常的处理

--第五章 输入输出--5.1.3-5.1.5-异常的处理

-5.2-输入输出流的概念

--输入输出流的概念

--第五章 输入输出--5.2-输入输出流的概念

-5.3.1-写文本文件

--写文本文件

--第五章 输入输出--5.3.1-写文本文件

-5.3.2-读文本文件

--读文本文件

--第五章 输入输出--5.3.2-读文本文件

-5.3.3-写二进制文件

--写二进制文件

--第五章 输入输出--5.3.3-写二进制文件

-5.3.4-读二进制文件

--读二进制文件

-5.3.5-File类

--File类

-5.3.6-处理压缩文件

--处理压缩文件

-5.3.7-对象序列化

--对象序列化

-5.3.8-随机文件读写

--随机文件读写

-5.4-本章小结

--本章小结

-课件

--课件

第六章 对象群体的组织

-6.0-导学

--导学

-6.1-Java集合框架介绍

--Java集合框架介绍

--第六章 对象群体的组织--6.1-Java集合框架介绍

-6.2-主要接口及常用的实现类

--6.2-主要接口及常用的实现类

--第六章 对象群体的组织--6.2-主要接口及常用的实现类

-6.3-常用算法

--常用算法

-6.4-数组实用方法

--6.4-数组实用方法

-6.5-基于动态数组的类型(Vector, ArrayList)

--基于动态数组的类型(Vector, ArrayList)

-6.6-遍历Collection

--遍历Collection

-6.7-Map接口及其实现

--Map接口及其实现

-6.8-第6章小结

--第6章小结

-课件

--课件

第七章 图形用户界面

-7.0-导学

--导学

-7.1-绘图

--绘图

-7.2-Swing基础

--Swing基础

-7.3-Swing的层次

--Swing的层次

-7.4-布局管理

--布局管理

-7.5-内部类

--内部类

-7.6-事件处理的基本概念

--事件处理的基本概念

-7.7-事件派发机制

--事件派发机制

-7.8-顶层容器

--7.8-顶层容器

-7.9-中间层容器(一)

--7.9-中间层容器(一)

-7.10-中间层容器(二)

--7.10-中间层容器(二)

-7.11-原子组件(一)

--7.11-原子组件(一)

-7.12-原子组件(二)

--7.12-原子组件(二)

-7.13-原子组件(三)

--7.13-原子组件(三)

-7.14-其它Swing特性

--7.14-其它Swing特性

-7.15-第7章小结

--7.15-第7章小结

-课件

--课件

Map接口及其实现笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。