1,词典是这样的一种数据结构:它能根据给定的键(索引值,key)来查找其对应的值(value)是否存在,在JAVA中主要由java.util.HashMap来完成该功能。如电话本就是词典的一个具体实例,其中名字作为键,电话号码作为值。客户端可以通过构造一个电话本来进行查询。本系列文章自己编程实现了Map这一数据结构,模拟实现了词典的功能,并给出了词典的两个具体应用---①根据姓名查找电话号码;②统计单词的出现频率

2,ADT词典接口DictionaryInterface.java的定义

词典接口定义了该词典所具有的基本功能,如添加元素、查询元素……这样,具体的实现类通过implements该接口完成具体的电话本功能的实现。

详细解释看代码注释

DictionaryInterface.java代码如下:

 package dictionary;

 import java.util.Iterator;

 public interface DictionaryInterface<K, V> {
/*
* Task: 将一个新元素插入词典。若给定的键已在词典中,则替换相应的值
* @param key 新元素的的查找键
* @param value 与键关联的值对象
* @return 若新元素被插入到词典中则返回null,若与key关联的value被替换,则返回原来的value
*/
public V add(K key, V value); /*
* Task: 从词典中删除一个指定的元素
* @param key 欲删除的元素的key对象
* @return 返回与key关联的value,若不存在这样的对象则返回null
*/
public V remove(K key); /*
* Task: 检索与给定的键相关联的值
* @param key 待检索元素的查找键对象
* @return 与查找键对象相关联的值,若不存在这样的对象则返回null
*/
public V getValue(K key); /*
* Task: 确定一个指定的元素在不在词典中
* @param key 待查找的元素的键对象
* @return 若key与词典中的一个元素相关联则返回true
*/
public boolean contains(K key); /*
* Task: 创建一个迭代器遍历词典中所有的查找键
* @return 返回一个迭代器,提供对词典中的键对象的顺序访问
*/
public Iterator<K> getKeyIterator(); /*
* Task: 创建一个迭代器遍历词典中所有的值
* @return 返回一个迭代器,提供对词典中值的顺序访问
*/
public Iterator<V> getValueIterator(); public boolean isEmpty();//判断词典是否为空
public boolean isFull();//判断词典是否满
public int getSize();//返回词典中当前元素(键-值二元组)个数
public void clear();//删除词典中所有的元素
}

参考资料:

词典的实现(2)-借助顺序表(数组)实现词典

词典的实现(3)--使用JAVA类库ArrayList实现Map数据结构

词典的实现(4)-使用Hash方式来实现词典

散列之HashTable学习

词典的实现(1)--Map的底层实现的更多相关文章

  1. Map的底层实现原理

    一,前言 1.1,概述 ​ 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V).Java提供了专门的集合类用 ...

  2. java中list和map的底层实现原理

    Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率 ...

  3. STL 容器区别:vector、list、deque、set、map的底层实现

    https://blog.csdn.net/shawjan/article/details/45424405

  4. map,set的底层实现:红黑树[多图,手机慎入]

    最近天下有一种颇不太平的感觉,各地的乱刀砍人,到处是贪官服法.京东准备上市了,阿里最近也提交申请了,猎豹也逆袭了,据说猎豹移动在国际市场上表现甚是抢眼.只有屌丝还在写着代码.花开花又谢,花谢花又开,为 ...

  5. 十七、Java基础---------集合框架之Map

    前两篇文章中介绍了Collection框架,今天来介绍一下Map集合,并用综合事例来演示. Map<K,V> Map<K,V>:Map存储的是键值对形式的元素,它的每一个元素, ...

  6. STL MAP及字典树在关键字统计中的性能分析

    转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...

  7. java07 map

    map底层,数组加链表 集合: 是一个对象,只不过这个对象可以容纳别的对象.存放对象就是操作地址. List:是有序可重复的. Set:无顺序,不可重复,有重复则后面把前面的覆盖. Map:键值对. ...

  8. map与hash_map使用与对比

    #include <iostream> #include <functional> #include <map> #include <ext/hash_map ...

  9. java容器类2:Map及HashMap深入解读

    Java的编程过程中经常会和Map打交道,现在我们来一起了解一下Map的底层实现,其中的思想结构对我们平时接口设计和编程也有一定借鉴作用.(以下接口分析都是以jdk1.8源码为参考依据) 1. Map ...

随机推荐

  1. Fiddler 跟踪手机请求.

    1. 想着跟踪下手机的部分请求, 所以使用fiddler 挂代理的方式来处理. 步骤 安装fiddler. 直接百度 安装即可.. 2. fiddler设置 tool-options设置 我试过解密h ...

  2. Smarty 变量修饰器

    为了更方便的实现 功能与显示分离,通常会用 smarty 将功能代码中的数据 assign 到页面中,在页面中合理使用 smarty 的修饰方法,会使页面显示更美观! 一个数据可同时使用多个修饰函数, ...

  3. WebAssembly是什么?

    现在的JavaScript代码要进行性能优化,通常使用一些常规手段,如:延迟执行.预处理.setTimeout等异步方式避免处理主线程,高大上一点的会使用WebWorker.即使对于WebWorker ...

  4. CSS实现水平居中的5种思路

    前面的话 水平居中是经常遇到的问题.看似方法较多,条条大路通罗马.但系统梳理下,其实都围绕着几个思路展开.本文将介绍关于水平居中的5种思路 text-align [思路一]:在父元素中设置text-a ...

  5. 洛谷P3066 [USACO12DEC]逃跑的BarnRunning Away From…

    题面链接 一句话题意:给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 我:似乎并不好做啊...看了题解后大雾... sol:考虑树上差分,对于一个点,在他那个位置++, ...

  6. php-编译模块2

    PHP扩展-扩展的生成和编译 首先说明一下,PHP扩展有两种编译方式:方式一:在编译PHP时直接将扩展编译进去方式二:扩展被编译成.so文件,在php.ini里配置加载路径: 以下开始说明创建PHP扩 ...

  7. BZOJ4385[POI2015]Wilcze doły——单调队列+双指针

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入 第一行包含三个整数n,p ...

  8. Android中用文件初始化sqlite 数据库(二)

    博 androidsqlite启动时数据库初始化  方法1已经讲述了一种初始化数据库的方法 它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系 ...

  9. 【LOJ#6280】数列分块4

    题目大意:维护一个长度为 N 的序列,支持两种操作:区间修改.区间求和.N <= 50000 题解:在维护分块的同时,维护每个区间的和,保证在 \(O(1)\) 的时间查询答案. 代码如下 #i ...

  10. MATLAB:图像减法运算(imsubtract函数)

    图像减法运行涉及到imsubtract函数 实现代码如下: clear all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc close all; A=imread('ca ...