自己写一个Map
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的更多相关文章
- 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 ...
- javascript 写一个 map方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 怎样写一个webpack loader
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- 学记:为spring boot写一个自动配置
spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- 一起写一个JSON解析器
[本篇博文会介绍JSON解析的原理与实现,并一步一步写出来一个简单但实用的JSON解析器,项目地址:SimpleJSON.希望通过这篇博文,能让我们以后与JSON打交道时更加得心应手.由于个人水平有限 ...
- JavaScript写一个连连看的游戏
天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java model文件夹下的 Global ...
- 操刀 requirejs,自己动手写一个
前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你 ...
随机推荐
- 基于MD5+RSA算法实现接口调用防扯皮级鉴权
概述 最近项目中需要对第三方开发接口调用,考虑了一下,准备采用MD5+RSA算对请求数据进行签名,来达到请求鉴权,过滤非法请求的目标. 数字签名采用MD5+RSA算法实现.RSA私钥要严格保密并提供安 ...
- ThinkPHP 5
use think\Controller 1.$this->request->param(); 内置request 安全对象, 不再使用 $_GET ,$_POST 2.path ...
- SAS 常用字符串函数
原文链接:https://www.cnblogs.com/snoopy1866/p/15085466.html CAT(item-1 <, -, item-n>) : 在保留首尾空格的情况 ...
- wireshark常见分析
转载于https://www.cnblogs.com/sn1per/p/12553064.html https://www.cnblogs.com/csnd/p/12332421.html 直接看上面 ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- JMeter(1)-介绍+环境+安装+使用
一.开发接口测试案例的整体方案: 分析出测试需求,并拿到开发提供的接口说明文档: 从接口说明文档中整理出接口测试案例(包括详细的入参和出参数据以及明确的格式和检查点). 和开发一起对评审接口测试案例 ...
- 阿里内部资料:Android开发核心知识笔记共2100页,58万字,完整版开放下载
作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难初中级Android岗位薪资上升空间有限,基本上 ...
- Java8新特性(三)之方法引用和构造器引用
1.使用场景 当要传递给Lambda体的操作,已经存在实现的方法了,就可以使用方法引用.(抽象方法的参数列表 必须与方法引用方法的参数列表保持一致) 2. 语法 使用操作符[::]将方法名和对象或类 ...
- Java8新特性(一)之Lambda表达式
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- C++小知识——显示VS大括号/花括号折叠按钮
这个功能默认是关闭的,打开路径如下: 将大纲语句块改为"True" 这个功能其实很有必要真不知道为啥默认要关闭这个功能. 站在巨人的肩膀上的思想,其实已经在互联网程序员之间深入人心 ...