美文网首页
用链表写一个字典

用链表写一个字典

作者: xin激流勇进 | 来源:发表于2019-04-11 20:53 被阅读0次
    package structures.mapdemo;
    
    public interface Map<K, V> {
        void add(K key, V value);
        V remove(K key);
        void set(K key, V newValue);
        V get(K key);
        int getSize();
        boolean isEmpty();
        boolean contains(K key);
    }
    
    package structures.mapdemo;
    
    public class LinkedListMap<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, V value) {
                this(key, value, null);
            }
    
            @Override
            public String toString() {
                return key + ":" + value;
            }
        }
    
        private Node dummyHead;
        private int size;
    
        public LinkedListMap() {
            dummyHead = new Node();
            size = 0;
        }
    
        private Node getNode(K key) {
            Node curNode = dummyHead.next;
            while (curNode != null) {
                if (curNode.key.equals(key)) {
                    return curNode;
                }
                curNode = curNode.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);
            } else {
                node.value = value;
            }
            size++;
        }
    
        @Override
        public V remove(K key) {
            Node preNode = dummyHead;
            while (preNode.next != null) {
                if (preNode.next.key.equals(key)) {
                    Node curNode = preNode.next;
                    preNode.next = curNode.next;
                    curNode.next = null;
                    size --;
                    return curNode.value;
                }
                preNode = preNode.next;
            }
    
            return null;
        }
    
        @Override
        public void set(K key, V newValue) {
            Node node = getNode(key);
            if (node != null) {
                node.value = newValue;
            } else {
                throw new IllegalArgumentException("Key is not here");
            }
        }
    
        @Override
        public V get(K key) {
            Node node = getNode(key);
            return node == null ? null : node.value;
        }
    
        @Override
        public int getSize() {
            return size;
        }
    
        @Override
        public boolean isEmpty() {
            return size == 0;
        }
    
        @Override
        public boolean contains(K key) {
            return getNode(key) != null;
        }
    
        @Override
        public String toString() {
            Node curNode = dummyHead.next;
            StringBuilder stringBuilder = new StringBuilder();
            while (curNode != null) {
                stringBuilder.append(curNode + "<-->");
                curNode = curNode.next;
            }
            return stringBuilder.toString();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:用链表写一个字典

          本文链接:https://www.haomeiwen.com/subject/qrtfwqtx.html