词典的实现(1)--Map的底层实现

1,词典是这样的一种数据结构:它能根据给定的键(索引值,key)来查找其对应的值(value)是否存在,在JAVA中主要由java.util.HashMap来完成该功能。如电话本就像一部词典,其中名字作为键,电话号码作为值。本系列文章自己编程实现了Map这一数据结构,模拟实现了电话本的功能。

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

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

DictionaryInterface.java代码如下:

 1 package dictionary;
 2
 3 import java.util.Iterator;
 4
 5 public interface DictionaryInterface<K, V> {
 6     /*
 7      * Task: 将一个新元素插入词典。若给定的键已在词典中,则替换相应的值
 8      * @param key    新元素的的查找键
 9      * @param value 与键关联的值对象
10      * @return    若新元素被插入到词典中则返回null,若与key关联的value被替换,则返回原来的value
11      */
12     public V add(K key, V value);
13
14     /*
15      * Task: 从词典中删除一个指定的元素
16      * @param key    欲删除的元素的key对象
17      * @return    返回与key关联的value,若不存在这样的对象则返回null
18      */
19     public V remove(K key);
20
21     /*
22      * Task: 检索与给定的键相关联的值
23      * @param key    待检索元素的查找键对象
24      * @return    与查找键对象相关联的值,若不存在这样的对象则返回null
25      */
26     public V getValue(K key);
27
28     /*
29      * Task: 确定一个指定的元素在不在词典中
30      * @param key    待查找的元素的键对象
31      * @return 若key与词典中的一个元素相关联则返回true
32      */
33     public boolean contains(K key);
34
35     /*
36      * Task: 创建一个迭代器遍历词典中所有的查找键
37      * @return 返回一个迭代器,提供对词典中的键对象的顺序访问
38      */
39     public Iterator<K> getKeyIterator();
40
41     /*
42      * Task: 创建一个迭代器遍历词典中所有的值
43      * @return 返回一个迭代器,提供对词典中值的顺序访问
44      */
45     public Iterator<V> getValueIterator();
46
47     public boolean isEmpty();//判断词典是否为空
48     public boolean isFull();//判断词典是否满
49     public int getSize();//返回词典中当前元素(键-值二元组)个数
50     public void clear();//删除词典中所有的元素
51 }
时间: 2024-10-03 21:54:12

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

Map的底层实现原理

一,前言 1.1,概述 ? 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V).Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储. Map中的集合,元素是成对存在的(理解为夫妻).每个元素由键与值两部分组成,通过键(K)可以找对所对应的值(V). Collecti

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ

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

[QQ群: 189191838,对算法和C++感兴趣可以进来] 最近天下有一种颇不太平的感觉,各地的乱刀砍人,到处是贪官服法.京东准备上市了,阿里最近也提交申请了,猎豹也逆袭了,据说猎豹移动在国际市场上表现甚是抢眼.只有屌丝还在写着代码.花开花又谢,花谢花又开,为什么这么多人没有安全感呢?是转型社会给大家带来了浮躁,还是什么?不得而知! 另外,就上一篇文章的问题,还请大家各抒己见!一道面试题:C++相比C#或者java的优势到底在哪里 OK,下面进入今天的主题.红黑树. 我们时候用到了红黑树?

Java容器(List、Map、Set、Iterator)

容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您做好. List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) Map特点:元素按键值对存储,无放入顺序 . 一.List接口 ArrayList:线程不安全,效率高. 底层实现是数组,查询块,修改删除慢. LinkedList: 线程不安全,效率高. 底层实现是链表,查询

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: template < class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键:第二个就是值:第四个就是空间配置器,默认使用alloc(随STL版本不同而不同).那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树).RB-tree树在进行插

黑马程序员——集合(map)

package com.yang.ex2; import java.util.Collection; import java.util.HashMap; import java.util.Map; /*集合Map:该集合存储键值对,一对一对的往里面存,而且要保证键的唯一性 * 1.添加 * put(K key ,V value) * putAll * 2.删除 * clear() * remove(Object key) * 3.判断 * containsKey/Value * boolean

Golang 中使用多维 map

http://tnt.wicast.tk/2015/11/02/golang-multiple-dimension-map/ Golang 的 XML/JSON 解析库乍看使用起来很方便,只要构造一样结构的 Struct 就可以一下子导入到变量中去了.其实手工构造 Struct 非常容易出现结构偏差,而且最要命的是 Unmarshal() 执行的时候不是严格导入所以没有任何报错. 于是这两天写了一个给 Golang 用的 XML to Struct 生成器,希望能一劳永逸. 不过在制作过程中有遇

黑马程序员-java基础-集合Map

-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! Map<K,V> Map<K,V>:Map存储的是键值对形式的元素,它的每一个元素,都是由键和值两个元素组成,键是不能有重复的,值是可以重复的,每一个键唯一指向一个值. Map体系 Map ——|hashtable: 底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.效率低,已被HashMap替代 ——|HashMap: 底层是哈希表数据结构,允许使用 null 值和 nu

day18 Map 的用法

Map接口概述 * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映射到一个值Map接口和Collection接口的不同 * Map是双列的,Collection是单列的 * Map的键唯一,Collection的子体系Set是唯一的 * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 Map集合的功能概述 * a:添加功能 * V put(K key,V value):添加元素. * 如果键是第一次存储,就直接存储元素,返回n