链表实现Map

public class LinkListMap<K,V> implements Map<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);
} public Node(K key)
{
this(key,null,null);
} @Override
public String toString()
{
return key.toString() + ":" + value.toString();
}
} private Node dummyHead; private int size; public LinkListMap()
{
dummyHead = new Node();
size = 0;
} private Node getNode(K key)
{
Node cur = dummyHead.next;
while (cur != null)
{
if (cur.key.equals(key))
{
return cur;
}
cur = cur.next;
}
return null;
} @Override
public void add(K key, V value) {
Node node = getNode(key);
if (node == null)
{
dummyHead.next = new Node(key,value,dummyHead.next);
size++;
}else {
node.value = value;
}
} @Override
public V remove(K key) {
Node prv = dummyHead;
while (prv.next != null)
{
if (prv.next.key.equals(key))
{
break;
}
prv = prv.next;
} if (prv.next != null)
{
Node delNode = prv.next;
prv.next = delNode.next;
delNode.next = null;
return delNode.value;
}
return null;
} @Override
public boolean contains(K key) {
return getNode(key) != null;
} @Override
public V get(K key) {
Node node = getNode(key);
return node == null ? null : node.value;
} @Override
public void set(K key, V newValue) {
Node node = getNode(key);
if (node == null)
{
throw new IllegalArgumentException("key is no exist.");
}else {
node.value = newValue;
}
} @Override
public int getSize()
{
return size;
} @Override
public boolean isEmpty()
{
return size == 0;
} @Override
public String toString()
{
StringBuffer str = new StringBuffer("");
Node node = dummyHead.next;
while (node != null)
{
str.append(node + "\n");
node = node.next;
}
return str.toString();
} }

链表底层实现Java的Map(上)的更多相关文章

  1. 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  2. java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  3. java中Map,List与Set的差别

    java中Map,List与Set的差别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,而且同一个数组 ...

  4. Java:Map总结

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  5. Java集合—Map

    简介 Map用户保存具有映射关系的数据,因此Map集合里保存着两组数,一组值用户保存Map里的key,另一组值用户保存Map里的value,key和value都可以是任何引用类型的数据.Map的key ...

  6. java之Map源代码浅析

    Map是键值对.也是经常使用的数据结构. Map接口定义了map的基本行为.包含最核心的get和put操作,此接口的定义的方法见下图: JDK中有不同的的map实现,分别适用于不同的应用场景.如线程安 ...

  7. Java之Map接口(双列集合)

    Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  8. java集合——Map

    声明:以下内容都是来自网络总结,将会参考很多,没有声明转载来源. 一.Map接口 1.HashMap HashMap和HashTable的区别:http://blog.csdn.net/shohoku ...

  9. Java 之 Map 接口

    一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...

随机推荐

  1. WebLogic SSRF

    本文主要记录一下Weblogic SSRF 利用的操作过程. 一.WebLogic SSRF漏洞简介 漏洞编号:CVE-2014-4210 漏洞影响: 版本10.0.2,10.3.6 Oracle W ...

  2. Python的编码风格

    1.采用四个空格作为缩进 2.一行代码不要超多79个字符 3.使用空行分割类,函数,以及大块代码 4.注释独占一行 5.使用文档字符串 6.操作符的两侧,逗号后面都要加空格(但是括号的里侧是不加的) ...

  3. 程序员快递请查收,来自Python黑客大佬的一份DDOS攻击说明书!

    DDoS攻击没有我们想象中的那么简单,并不是什么Python程序员都能够做到的. 若要知晓黑客利用DDOS攻击原理那么我们必须要知道是实行DDoS攻击比较难的原因是什么? 很简单的一句话概括:&quo ...

  4. 第五章 MySQL函数

    一.数学函数 (1) 绝对值函数:ABS(x) ABS(x) 用于返回 x 的绝对值 mysql> SELECT ABS(2), ABS(-2.3), ABS(-33); +--------+- ...

  5. 第三次 orm自动建表及遇到的问题

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 方法很简单,在hibernate.cfg.xml内加入 <property name="hi ...

  6. Python_单元测试

    Stack.py class Stack: def __init__(self, size = 10): self._content = [] #使用列表存放栈的元素 self._size = siz ...

  7. 简述spring的工作原理

    建议不要硬着头皮看spring代码,本身的代码800多m,就是不上班开始看也不知道什么时候看完.如果想学学ioc,控制反转这些建议看看jodd项目,比较简练,但是我仍然不建议过多的看这些框架的代码,因 ...

  8. Ajax跨域之ContentType为application/json请求失败的问题

    项目里的接口都是用springmvc写的,其中在@requestmapping接口中定义了consumes="application/json",也就是该接口只接受ContentT ...

  9. Tiny4412中断介绍

    通过几天裸板驱动开发,今天对ARM的中断做一些简单总结,前面我们已经了解了ARM的7种异常模式,中断是异常模式的一种,在ARM中异常事件发生将会触发中断,但是,所有的中断都不能直接访问cpu,而是都统 ...

  10. Jmeter4.0分布式测试时启动Jmeter.server时报错

       最近又开始研究Jmeter,将新版本4.0下载下来体验,准备远程分布式测试,又出现一些问题,废话不多说,直入主题把! Windows 系统启动Jmeter 4.0的JmeterServer.ba ...