Map的实现其实很简单,一个key对应一个value就行 。

本Map是写着玩的,是想告诉初学者我们也可以写一个简单的Map来自己用

代码:

public class MyMap<K, V> {
private Node<K, V>[] nodes;
private int size; private static class Node<K, V> {
K key;
V value; Node(K key, V value) {
this.key = key;
this.value = value;
}
} private void put(K key, V value) {
if (nodes == null) {
nodes = new Node[10];
}
int index = indexOfKey(key);
if (index != -1) {
nodes[index].value = value;
} else {
nodes[size] = new Node<>(key, value);
size++;
}
} private int indexOfKey(K key) {
for (int index = 0; index < size; index++) {
if (key.equals(this.nodes[index].key)) {
return index;
}
}
return -1;
} public V get(K key) {
int index = indexOfKey(key);
if (index != -1) {
return (V) nodes[index].value;
}
return null;
} public int size() {
return size;
} public void remove(K key) {
int index = indexOfKey(key); if (index != -1) {
System.arraycopy(nodes, index + 1, nodes, index, size - 1);
nodes[--size] = null;
} } public void clear() {
nodes = null;
size = 0;
} private static class Person {
private String name;
private Integer age; public Person(String name, Integer age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
} public static void main(String[] args) {
MyMap<String, Person> myMap = new MyMap<>();
myMap.put("lzl", new Person("lzl", 21));
myMap.put("zwt", new Person("zwt", 21));
System.out.println("lzl的年龄是:" + myMap.get("lzl").getAge());
System.out.println("zwt的年龄是:" + myMap.get("zwt").getAge());
System.out.println("myMap的大小是:" + myMap.size()); myMap.clear();
System.out.println("clear myMap的大小是:" + myMap.size()); MyMap<String, Integer> myMap1 = new MyMap<>();
myMap1.put("zwt", 21);
System.out.println(myMap1.get("zwt")); }
}

结果:

lzl的年龄是:21
zwt的年龄是:21
myMap的大小是:2
clear myMap的大小是:0
21

并没有实现Map接口 , 没有考虑到底层数组的扩容 。

自己写一个Map的更多相关文章

  1. java 写一个 map reduce 矩阵相乘的案例

    1.写一个工具类用来生成 map reduce 实验 所需 input 文件 下面两个是原始文件 matrix1.txt 1 2 -2 0 3 3 4 -3 -2 0 2 3 5 3 -1 2 -4 ...

  2. javascript 写一个 map方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 怎样写一个webpack loader

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  4. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  5. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  6. 一起写一个JSON解析器

    [本篇博文会介绍JSON解析的原理与实现,并一步一步写出来一个简单但实用的JSON解析器,项目地址:SimpleJSON.希望通过这篇博文,能让我们以后与JSON打交道时更加得心应手.由于个人水平有限 ...

  7. JavaScript写一个连连看的游戏

    天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...

  8. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  9. 操刀 requirejs,自己动手写一个

    前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你 ...

随机推荐

  1. SQL根据两个日期生成年、月、日

    1 DECLARE @beginTime DATETIME, @endTime DATETIME 2 SET @beginTime ='2019-03-01' 3 SET @endTime ='201 ...

  2. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  3. ABC165C题解

    题目 看题目的时候一脸懵,直到看见数据范围 \[N \le 10,\; M \le 10,\; Q \le 50 \] 之后才意识到问题的严重性. 毕竟数据如此的小,我们完全可以用阶乘复杂度算法卡过去 ...

  4. API文档生成(c# dll)

    一.Sandcastle 这个是c#类库方法根据注释生成帮助文档的工具,我们经常会遇到把DLL或者API提供给别人调用的情况,通过在方法中添加注释,然后再用Sandcastle 来自动生成文档给调用者 ...

  5. Haskell Interactive Development in Emacs

    Installation Following haskell-mode. Use MELPA repository: add the following into ~/.emacs (require ...

  6. pikachu Files Inclusion

    文件包含分为远程文件包含和远程文件包含 比如程序员为了提高效率让代码看起来简洁,会使用包含函数的功能,写多个文件 之后需要了进行调用,比如.c写了很多个函数分别在不同的文件里,用的时候直接 引用文件即 ...

  7. XCTF_ics-07

    这道题确实也卡了很久 垮了垮了 话不多说直接找到view source.php审代码吧 先看这段 要你: (1)floatval($ _ GET [id])!=='1' //浮点不为1 (2)subs ...

  8. (五)Linux之文件与目录管理以及文本处理

    Linux之文件与目录管理 目录 Linux之文件与目录管理 前言 绝对路径与相对路径说明: 一.目录常用命令 常用处理目录的命令: 切换目录 cd 显示当前路径 pwd 查看目录下文件 ls 创建目 ...

  9. 分享一份【饿了么】Java面试专家岗面试题,欢迎留言交流哦!

    前段时间有小伙伴去饿了么面试Java专家岗,记录了一面技术相关的问题,大家可以看看. 基础问题 1.数据库事务的隔离级别? 2.事务的几大特性,并谈一下实现原理 3.如何用redis实现消息的发布订阅 ...

  10. C# KeyValuePair<TKey,TValue> 与 Dictionary<TKey,TValue> 区别

    KeyValuePair<TKey,TValue> 可以设置.查询的一对键值 是struct Dictionary<TKey,TValue> 可以设置.查询的多对键值的集合 总 ...