map实现

实现HashMap

/*
*路人假helloWorld
*/
package com.cjj.sort;

public class SymbolTable<Key,Value> {
    private Node head;
    private int N;

    //内部结点类
    public class Node{
        public Key key;
        public Value value;
        public Node next;

        public Node(Key key,Value value,Node next){
            this.key = key;
            this.value = value;
            this.next = next;
        }
    }

    public SymbolTable(){
        this.head = new Node(null,null,null);
        this.N = 0;
    }

    //获取符号表的大小
    public int size(){
        return N;
    }
    //向符号表中插入一个键值对
    public void put(Key key,Value value){
        Node n = head;
        //如果符号表中已有该建,则覆盖原来的value值
        while(n.next != null){
            n = n.next;
            if (n.key.equals(key)){
                n.value = value;
                return;
            }
        }
        //如果符号表中没有该键,则插入该键值对

        Node newNode = new Node(key,value,null);
        Node oldFist = head.next;
        newNode.next = oldFist;
        head.next = newNode;
        N++;
    }
    //删除键为key的键值对
    public void delete(Key key){
        Node n = head;
        while(n.next != null) {
            if (n.next.key.equals(key)) {
                n.next = n.next.next;
                N--;
                return;
            }
            n = n.next;
        }
    }
    //根据键,找对应的值
    public Value get(Key key){
        Node n = head.next;
        while(n != null){
            if (n.key.equals(key)){
                return n.value;
            }
            n = n.next;
        }
        return null;
    }
}

测试

package com.cjj.test;

import com.cjj.sort.SymbolTable;

public class SymbolTableTest {
    public static void main(String[] args) {
        SymbolTable<Integer,String> s = new SymbolTable<>();
        s.put(1,"喜羊羊");
        s.put(2,"灰太狼");
        s.put(3,"懒羊羊");
        s.put(4,"美羊羊");
        System.out.println("键值对个数:" + s.size());

        s.put(4,"红太狼");
        System.out.println("替换后的值:" + s.get(4));
        System.out.println("替换后的个数:" + s.size());

        s.delete(3);
        System.out.println("删除后元素的个数:" + s.size());
    }
}

测试结果

posted @   路人假helloWorld  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示