字典树(Trie树) Java实现源码参考

2023-11-07

定义

字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。
在这里插入图片描述

字典树结构对应的Java源码

public class Trie {
    char val;

    boolean isEnd = false;

    Trie[] subChildren = new Trie[26];

    public Trie(char val) {
        this.val = val;
    }
}

字典树增删改查对应的Java源码

本次示例仅展示了insert,find方法

public class TrieDemo {

    Trie root = new Trie(' ');

    public void insert(String word) {

        Trie node = root;
        for (int i = 0; i < word.length(); i++) {

            char c = word.charAt(i);
            int idx = c - 65;

            if (node.subChildren[idx] == null) {
                Trie sub = new Trie(c);
                node.subChildren[idx] = sub;
            }
            node = node.subChildren[idx];
        }
        node.isEnd = true;

    }

    public boolean exist(String word) {

        Trie node = root;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            int idx = c - 65;

            if (node.subChildren[idx] == null) {
                return false;
            }
            node=node.subChildren[idx];
        }

        return node.isEnd;
    }


    public static void main(String[] args) {
        TrieDemo demo = new TrieDemo();
        demo.insert("HELLO");
        System.out.println(demo.root);
        boolean f = demo.exist("HELLO");
        System.out.println(f);
    }
}

字典树增删改查线程安全版本对应的Java源码

public class TrieSynchronizedDemo {

    Trie root = new Trie(' ');

    public void insert(String word) {

        Trie node = root;
        for (int i = 0; i < word.length(); i++) {

            char c = word.charAt(i);
            int idx = c - 65;

            if (node.subChildren[idx] == null) {
                synchronized (node) {
                    if (node.subChildren[idx] == null) {
                        Trie sub = new Trie(c);
                        node.subChildren[idx] = sub;
                    }
                }

            }
            node = node.subChildren[idx];
        }
        node.isEnd = true;

    }

    public boolean exist(String word) {

        Trie node = root;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            int idx = c - 65;

            if (node.subChildren[idx] == null) {
                return false;
            }
            node = node.subChildren[idx];
        }

        return node.isEnd;
    }


    public static void main(String[] args) {
        TrieSynchronizedDemo demo = new TrieSynchronizedDemo();
        demo.insert("HELLO");
        System.out.println(demo.root);
        boolean f = demo.exist("HELLO");
        System.out.println(f);
    }

}

参考文章:
https://www.cnblogs.com/xujian2014/p/5614724.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字典树(Trie树) Java实现源码参考 的相关文章

随机推荐

  • Vue项目运行报错解决(node版本高于项目依赖所需版本问题解决)

    报错截图 报错原文 Syntax Error Error Node Sass does not yet support your current environment Windows 64 bit with Unsupported run
  • React组件设计,仿米游社首页频道设置页面

    前言 作为一个刚接触react 组件设计不久的新人 独立完成一个组件的设计开发其中过程是十分卡手的 本篇详尽的描述了米游社首页频道选择页面组件开发的全过程 希望这个这个简单组件的设计开发能对和我一样接触react组件开发不久的人有点帮助 准
  • yolox小计

    1 环境配置 1 1 没有什么用的试错 activate D conda envs pytorch pip3 install U pip pip3 install r requirements txt 报错 解决办法 python m en
  • XNA是什么?

    Software will be the single most important force in digital entertainment over the next decade XNA underscores Microsoft
  • 虚幻4学习笔记(9)基础概念、常用快捷键汇总、蓝图概念

    虚幻4学习笔记 基础概念 常用快捷键汇总 中英文命名注意事项 帧和秒的概念 带星号文件的意思 编译的作用 实例和原素材 情景关联 蓝图概念 函数概念 宏的概念 宏与蓝图的区别 函数 事件的区别 变量的概念 面向对象思想 B站UP谌嘉诚课程
  • springMVC @ModelAttribute学习

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 转自 http hbiao68 iteye com blog 1948380 ModelAttribute 绑定请求参数到命令对象 ModelAttribute一个具有如下
  • 前后端分离部署方式

    转自https www cnblogs com moveofgod p 12363544 html 写得简洁明了 例如 vue 这种前后端分离的框架如何部署 1 前后端一起部署 前端打包成静态文件后 copy 到后端项目中 然后部署后端项目
  • GO语言实战要点摘录

    1 变量的声明与定义 1 var t T 通常用于零值初始化 非零值初始化通常采用短变量声明 初始化的方式 type user struct name string age int 用右侧的指定的类型初始化变量 每行初始化一个变量 以逗号结
  • numpy和pandas简单快速入门

    由于部分代码需要和数据文件配合 将项目和文件个人的GitHub 地址 https github com 1769172502 machine learning 关于numpy参考菜鸟地址 http www runoob com numpy
  • 使用QProcess调用外部程序

    在实际的项目开发中往往会有调用外部程序的需求 例如 主程序中添加调用记事本的快捷方式等 QProcess调用接口介绍 QProcess是Qt专门用于外部程序启动并与之通信的类 启动外部程序主要分为两种方式 一体式 将随主程序的退出而退出 v
  • 如何解决Dev-c++无法调试或者无法性能分析的问题

    无法调试 1 打开Dev c 2 点击屏幕顶部的 工具 3 点击 编译选项 4 点击 代码生成 优化 5 点击 连接器 6 将 产生调试信息 改为 yes 7 点击 确定 无法性能分析 1 打开Dev c 2 点击屏幕顶部的 工具 3 点击
  • uniapp调试 手机上没有信任本计算机的授权,请在手机上信任该授权

    真机运行失败 失败原因 手机上没有信任本计算机的授权 请在手机上信任该授权 HBUILDER 手机调试 提示没有授权 其实就是usb调试权限 刷这样才能用pc操作手机进行安装app等操作 这个时候可以 断开手机和电脑的连接 然后重新连接 跳
  • SQLyog ERROR 1045 : Access denied for user ‘root’@‘localhost’ (using password: YES)

    Linux和MySQL小白遇到的一些问题 在window中使用SQLyog远程连接虚拟机中Linux CentOs7 中的MySQL数据库 问题描述及解决方法1 连接时报错ERROR 1045 Access denied for user
  • uniapp实现用户登录

    store js文件 login vue页面
  • html语言左对齐是什么,html - 如何左对齐标签?

    我试图左对齐标签保持输入字段右对齐没有成功 我能够对齐标签或输入字段 但不能同时使用它们 我已经尝试了很多东西 但没有奏效html 如何左对齐标签 HTML Info Cod Name Phone Address CSS form styl
  • halcon识别斜着的车牌

    对于倾斜的车牌 我们必须用仿射变换 将车牌弄正 再进行识别 如图 halcon代码 read image Image666 C Users Administrator Desktop 666 jpg decompose3 Image666
  • C/C++经典项目:用C++制作在线考试系统(附源码)

    在线考试是指通过操作计算机在网络上进行考试整个过程的一种考试形式 脱离了纸质媒体 也可以说成是通过网络媒体进行的考试 是现如今比较常用的一种考试形式 用C 编写的在线考试系统 Access MSSQL数据库可选 从权限操作来看 包含学生 教
  • java如何使用代码求两个list集合的差集呢?

    转自 java如何使用代码求两个list集合的差集呢 下文笔者讲述求list集合的差集的方法简介说明 如下所示 差集 用一个集合减去一个集合得到的集合 我们称之为 差集 实现思路 使用stream流中的filter方法对集合 进行 不包含关
  • C#编程,字符串与字符、字符串与字节的转化方法

    1 string 转换成 Char string ss abcdefg char cc ss ToCharArray 2 Char 转换成string string s new string cc 3 byte 与 string 之间的装换
  • 字典树(Trie树) Java实现源码参考

    定义 字典树 又称为单词查找树 Tire数 是一种树形结构 它是一种哈希树的变种 用于保存大量的字符串 它的优点是 利用字符串的公共前缀来节约存储空间 字典树结构对应的Java源码 public class Trie char val bo