栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java符号表和有序符号表的概念及实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java符号表和有序符号表的概念及实现

目录

基本概念

符号表API设计

采用链表实现

结点类​

符号表 ​

代码实现

测试代码

 结果

有序符号表


基本概念

最主要的目的就是将一个键和一个值联系起来。
定义:符号表是一种存储键值对的数据结构,支持插入(put)和查找(get)操作,即给定建得到相应的值。

每个键只对应一个值向符号表中插入键值对,如果已存在就会替换原有的值

符号表API设计

    采用链表实现

    结点类

    符号表 

 代码实现
package cn.itcast.algorithm.symbol;

public class SymbolTable {

    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){
        //如果符号表中存在健为key的键值对,则找到该结点替换value
        Node n=head;
        while(n.next!=null){
            n=n.next;
            if(n.key.equals(key)){
                n.value=value;
                return;
            }
        }
        //符号表中不存在,则新建一个结点,保存要插入的键值对
        Node newNode = new Node(key, value, null);
        Node oldFirst=head.next;
        head.next=newNode;
        newNode.next=oldFirst;

        N++;
    }

    //删除符号表中为key的键值对
    public void delete(key 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;
        }
    }

    //从符号表中找到key对对应的值
    public value get(key key){
        Node n=head;
        while(n.next!=null){
            n=n.next;
            if(n.key.equals(key)){
                return n.value;
            }
        }
        //遍历完,不存在时
        return null;
    }
}

测试代码
package cn.itcast.algorithm.symbol;

public class SymbolTableTest {
    public static void main(String[] args) {
        SymbolTable S = new SymbolTable<>();

        //put
        S.put(1,"十号");
        S.put(2,"九号");
        S.put(3,"八号");
        System.out.println("元素个数为:"+S.size());

        S.put(2,"六号");
        System.out.println("替换完毕后元素个数:"+S.size());

        //get
        System.out.println("替换完毕后,健2对应的值:"+S.get(2));

        //delete
        S.delete(2);
        System.out.println("删除后元素个数:"+S.size());
    }
}

 结果

有序符号表

有序符号表的实现就是把符号表的put方法修改一下即可,插入按照符号表key的大小有顺序的放入

//有序
    public void put(key key,value value){
        Node curr=head.next;
        Node pre=head;
        while(curr!=null && key.compareTo(curr.key)>0){
            pre=curr;
            curr=curr.next;
        }
        //如果值一样就替换
        if(curr!=null && key.compareTo(curr.key)==0){
            curr.value=value;
            return;
        }
        Node newNode = new Node(key, value, curr);
        pre.next=newNode;

        N++;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号