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 @ 2022-03-19 16:41  路人假helloWorld  阅读(32)  评论(0)    收藏  举报