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;
        }
        
        
    }
  • 相关阅读:
    docker save docker load
    Vue 开发线路 资料 汇总
    electron 开发拆坑总结
    mysqldbcopy 数据库复制工具
    用rsync命令删除大文件夹
    linux nc,nmap,telnet ,natstat命令
    搭建云版容器版本 需要的基础软件 安装工具
    phantomjs 前端测试工具
    消息列队 php 基于redis 实现
    部分安卓机器【小米手机】,文字显示不全
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9866477.html
Copyright © 2011-2022 走看看