zoukankan      html  css  js  c++  java
  • 链表底层实现Java的Map(上)

    链表实现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 + "
    ");
                node = node.next;
            }
            return str.toString();
        }
    
    }
    
  • 相关阅读:
    LINUX的LAMP环境搭配
    Jquery添加元素append及阻止表单提交submit
    django上传文件
    Html5本地存储LocalStorage
    Html5离线缓存详细讲解
    html5的canvas绘制迷宫地图
    EXT.NET复杂布局(二)——报表
    Silverlight——施工计划日报表(一)
    Silverlight——施工计划日报表(二)
    前端学HTTP之网络基础
  • 原文地址:https://www.cnblogs.com/dslx/p/10498451.html
Copyright © 2011-2022 走看看