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接口 , 没有考虑到底层数组的扩容 。

最新文章

  1. SEO如何辨别真假Baiduspider
  2. BFC布局原理
  3. C/C++深度copy和浅copy
  4. ThinkPHP之中的图片上传操作
  5. How to install DIG dns tool on windows 7
  6. 垃圾回收(GC)的三种基本方式
  7. For循环练习之99乘法表和转义字符
  8. (hdu 7.1.8)Quoit Design(最低点——在n一个点,发现两点之间的最小距离)
  9. Openjudge-计算概论(A)-大象喝水
  10. Chapter 2 Open Book——8
  11. 第1章 ssh和SSH服务(包含隧道内容)
  12. 201521123065《java程序设计》第七周学习总结
  13. ASP.NET没有魔法——ASP.NET Identity与授权
  14. ubuntu 一些琐碎知识
  15. 【Qt编程】基于Qt的词典开发系列&lt;十四&gt;自动补全功能
  16. 网络流24题——骑士共存问题 luogu 3355
  17. 小米Note 2简单卡刷开发版启用root超级权限的步骤
  18. echarts画图时tooltip.formatter参数params不会更新(转载)
  19. 使用nvm-windows安装nodejs遇到的问题(转载)
  20. HTTP协议中源端口和目标端口的问题

热门文章

  1. Python脚本:爬取天气数据并发邮件给心爱的Ta
  2. 浅谈MySQL与mongodb的区别
  3. Spring Cloud分区发布实践(4) FeignClient
  4. 通过比较rgb破解滑动验证码
  5. Sql Server备份表,动态生成表名称
  6. JUC学习笔记(六)
  7. JavaScript高级程序设计(第4版)-第一章学习
  8. 月薪20k+的Android面试都问些什么?(含答案)
  9. 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?
  10. Linux服务器下JVM堆栈信息dump及问题排查