自己写一个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模块化工具,可以让你 ...
随机推荐
- SQL_之 递归_START WITH id ='102' CONNECT BY PRIOR pid=id
oracle 递归用法 SELECT * FROM menu START WITH id ='102' CONNECT BY PRIOR pid=id 一种应用 SELECT * FROM menu ...
- 【LeetCode】204.计数质数
问题描述: 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 这是一道简单题,但是却并没有那么直 ...
- 5G时代,视频会议的未来
过去,2G打开了了移动互联网天下,3G促成了即时通信,诞生了QQ.微信等巨头,4G 带来了短视频兴起,字节跳动等公司崛起.2.3.4G的出现促成了移动互联网10年繁荣.而5G的出现,也会促成至少10年 ...
- SQL语句(一)基础查询与过滤数据
目录 一.数据库测试表 二.基础查询 1. 获得需要的记录的特定字段 2. 查询常量值 3. 查询表达式 4. 查询函数 5. 起别名 6. 去重 7. CONCAT函数的简单使用 三.过滤数据 大纲 ...
- 如何区别php,jsp,asp,aspx随笔
PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面.它支持目前绝大多数数据库.还有一点, ...
- BUUCTF-[SUCTF 2019]CheckIn(.user.ini利用+exif_imagetype绕过)
目录 分析 .user.ini使用条件 解题 参考链接 记一道.user.ini利用+exif_imagetype绕过的文件上传的题. 分析 先正经上传一张图片.回显了存储路径,同时发现还包含了一个i ...
- 三年Android开发,竟只会增删改查,被面试官一顿怼!
最近看到某公司面试官发的这样一个帖子: 我面试了一个有三年Android开发经验的小伙子,也是我有史以来给别人面试时间最短的一次,不到十分钟就结束了,原因很简单,底子太差只会curd,很多技术性的问题 ...
- 还怕问源码?Github上神级Android三方源码解析手册,已有7.6 KStar
或许对于许多Android开发者来说,所谓的Android工程师的工作"不过就是用XML实现设计师的美术图,用JSON解析服务器的数据,再把数据显示到界面上"就好了,源码什么的,看 ...
- Linux无法下载GCC
Linux:ping百度ping不通 因为作业需要今天使用Linux下载GCC编译器,却发生了不可预知的错误: Errors during downloading metadata for repos ...
- Linux命令(一)之目录结构、Linux终端操作、关机重启等一些基本操作
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...