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();
        }
    
    }
    
  • 相关阅读:
    Matlab GUI保存图片
    Matlab GUI读入图片
    Android如何缓存你的BITMAP对象
    115个Java面试题和答案——终极列表(下)
    115个Java面试题和答案——终极列表(上)
    java面试题及答案(基础题122道,代码题19道)
    安卓面试题精华
    写些安卓开发的面试题
    Android笔试总结
    Android 面试题(答案最全)
  • 原文地址:https://www.cnblogs.com/dslx/p/10498451.html
Copyright © 2011-2022 走看看