zoukankan      html  css  js  c++  java
  • java——链表映射 LinkedListMap

    好像也不是基于链表来实现的,而是采用与链表类似的节点形式重新定义了一个节点内部类,以此来实现映射

    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(K key) {
                this(key, null, null);
            }
            public Node() {
                this(null, null, null);
            }
            
            @Override
            public String toString() {
                return key.toString() + " : " + value.toString();
            }
        }
        
        private Node dummyHead;
        private int size;
    
        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) {
            //key具有唯一性
            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 prev = dummyHead;
            while(prev.next != null) {
                if(prev.next.key.equals(key)) {
                    break;
                }
                prev = prev.next;
            }
            if(prev.next != null) {
                Node cur = prev.next;
                prev.next = cur.next;
                cur.next = null;
                size --;
                return cur.value;
            }
            return null;
        }
    
        @Override
        public boolean contains(K key) {
            // TODO Auto-generated method stub
            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 + "doesn't exist!");
            node.value = newValue;
        }
    
        @Override
        public int getSize() {
            // TODO Auto-generated method stub
            return size;
        }
    
        @Override
        public boolean inEmpty() {
            // TODO Auto-generated method stub
            return size == 0;
        }
        
        
    }
  • 相关阅读:
    千年决心
    编译器及其命令行模式杂谈
    How Microsoft Lost the API War
    再看计算机本科该如何学习
    C++杂记(一)
    C++杂记
    Java IO 学习心得
    VMDq (Virtual Machine Device Queue) in OpenSolaris
    WCHAR and wchar_t 的区别 (zz)
    error C3225: generic type argument for 'T' cannot be 'System::Collections::Generic::KeyValuePair ^',
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9866477.html
Copyright © 2011-2022 走看看