数据结构之映射表(Map)---第一篇---用链表实现
一、映射表(Map)简介
- 映射表是一种依照键/值对存储元素的容器,又称字典(directory),散列表(hash table)。
- 映射表将键和值一起保存,键类似于数组中的下标,不能有重复的键,每个键对应一个值
- 键和它对应的值构成一个条目。
二、链表实现映射表
package Map;public class LinkedListMap<K, V> implements MyMap<K, V> {//链表结点类
private class Node{public K key;public V value;public Node next;/*******************构造函数*******************/public Node(K key, V value, Node next) {this.key = key;this.value = value;this.next = next;} public Node() {this(null,null,null);}@Override public String toString() {return key.toString() + " : " + value.toString();}
}private Node dummyHead; //头指针
private int size;public LinkedListMap() {dummyHead = new Node();size = 0;
}//获取键值key所对应的结点,这个方法为后续一些方法的实现提供了方便
public Node getNode(K key) {Node current = dummyHead.next;while(current != null) {//这里不能用==,因为当key为字符串等时,判断将不准确if(key.equals(current.key)) { return current;}current = current.next; }return null;
}//使用头插法向映射中添加条目public void add(K key, V value) {Node node = getNode(key);if(node == null) { //映射中不存在键值为key的结点Node newNode = new Node(key,value,dummyHead.next);dummyHead.next = newNode;size++;}else//映射中存在键值为key的结点,则更新valuenode.value = value;}//查找键所对应条目是否在映射中public boolean contains(K key){Node node = getNode(key);return node != null;}//删除键值key所对应的条目public V remove(K key){Node node = getNode(key);if(node == null) //映射中不存在键值为key的条目return null;//映射中存在键值为key的条目//1. 寻找要删除结点的前一个结点Node prevNode = dummyHead;while(prevNode.next != node) {prevNode = prevNode.next;}//2. 将要删除的前一个结点和要删除结点的后一个结点相连prevNode.next = node.next;//3. 更新sizesize--;return node.value;}//获取键值为key的条目public V get(K key){Node node = getNode(key);return (node == null) ? null : node.value;}//更新某一条目public void set(K key, V newValue){Node node = getNode(key);//键所对应结点存在if(node != null) {node.value = newValue;}//键所对应结点不存在else {throw new IllegalArgumentException(key + "doesn't exists");}}//获取映射表的大小public int getSize(){return size;}//判断映射表是否为空public boolean isEmpty(){return size == 0;}//测试public static void main(String[] args) {String str = "aaaaabbbbbbcccccdddddeeeee";LinkedListMap<Character,Integer> map = new LinkedListMap<>(); for(int i = 0; i < str.length(); i++) {char key = str.charAt(i);if(map.contains(key)) {map.set(key, map.get(key) + 1);}else {map.add(key, 1);}} System.out.println("a : " + map.get('a'));System.out.println("b : " + map.get('b'));System.out.println("c : " + map.get('c'));System.out.println("d : " + map.get('d'));System.out.println("e : " + map.get('e'));}}
数据结构之映射表(Map)---第一篇---用链表实现相关推荐
- 能带你起飞的【数据结构】成王第一篇:数据结构的顺序表
目录 前言 一.什么是顺序表 1.顺序表的概念及结构 创建顺序表 打印顺序表 获取顺序表长度 在pos位置新增元素 判定是否包含某个元素 查找某个元素对应的位置 获取 pos 位置的元素 给 pos ...
- 2021-10-16 集合(set)与映射(map) 恋上数据结构笔记
文章目录 集合(Listset and Treeset) 集合时间复杂度分析 Treeset的局限性 映射(Map) Map与Set 集合(Listset and Treeset) 概念:就是不存储重 ...
- 深入理解表单脚本系列第一篇——表单对象
前面的话 javascript最初的一个应用就是分担服务器处理表单的责任,打破处处依赖服务器的局面.尽管目前的web和javascript已经有了长足的发展,但web表单的变化并不明显.由于web表单 ...
- 第一篇 数据结构、设计模式与手写代码
目录 1.怎么理解时间复杂度和空间复杂度? 2.数组和链表结构简单对比? 3.怎么遍历一个树 4.冒泡排序(Bubble Sort) 5.快速排序(Quick Sort) 6.二分查找(Binary ...
- Java中的映射Map - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的映射Map - 入门篇>,希望对大家有帮助,谢谢 简介 前面介绍了集合List,这里开始简单介绍下映射Map,相关类如下图所示 正 ...
- 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 一.静态映射表建立过程分析 1.建立映射表的三个关键部分 (1)映射表描述 具体物理地址和虚拟地址的值相关的宏定义 ...
- 【数据结构 C描述】一个文本串可用事先给定的字母映射表进行加密。
一个文本串可用事先给定的字母映射表进行加密.例如,假设字母映射表为: a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t c o ...
- 聊聊后端程序员的知识体系-第一篇
聊聊后端程序员的知识体系-第一篇 原文链接:https://www.fpthinker.com/backend_knowledge_architecture/knowledge.htmll 亲爱的读者 ...
- 【数据结构与算法】第三篇:题型积累
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.刷题的准备与步骤 (1)第一步:先学会至少一种计算机语言.学习数 ...
最新文章
- 应用丨AI和机器学习如何改变美国政府决策方式
- PMCAFF产品众测 | 对话随手攒CEO聊聊这款产品的设计、推广和改进(活动已结束)
- MFC六大核心机制之一:MFC程序的初始化
- php搜索所有路线,php包含文件路径查找规则
- Python程序员每天必做的几个动作
- [JSP]自定义标签库taglib
- DynamicFusion: Reconstruction and Tracking of Non-rigid scenes in real-time
- kdj指标主要看哪个值_终于有人把KDJ指标总结全了,值得收藏
- 计算机网络与综合布线系统设计,计算机网络综合布线系统设计
- 第三方公众号用 微信联合 登录
- Windows 徽标键相关的快捷键
- 见一博客搬家公司 把老紫竹火龙果和我的blog全搬他家去了
- 人工智能如何改变联络中心座席
- 解决Java ,class java.lang.String cannot be cast to class java.lang.Integer
- 对互联网产品运营的理解
- Mongoose使用操作
- 使用Matlab2019b测试音频系统的频响(FreqResponse)与脉冲响应(ImpulseResponse)
- Hawk-数据抓取工具:简明教程
- fest3d_AssertJ Fest Hamcrest
- 钢管热处理市场现状研究分析-