Java 字典树实现 优化版

package com.spr.game;

import gnu.trove.map.hash.TCharObjectHashMap;

/**
 * @ClassName: WordTrie
 * @Description 字典树
 * @Author springhao123
 * @Date 2019/7/24 15:45
 * Version 1.0
 **/
public class WordTrie {
    /**
     * 配置文件没办法跑的字段
     */
    public final static String[] configStrs = {"#NAME?"};

    /**
     * 节点信息
     */
    public class WordTrieNode {
        /**
         * 节点的map信息
         */
        private TCharObjectHashMap childNode;
        /**
         * 是否到词的结尾
         */
        public boolean worldEnd;

        public WordTrieNode() {
            childNode = new TCharObjectHashMap();
            worldEnd = false;
        }
    }

    /**
     * 根节点信息
     */
    private WordTrieNode root;

    public WordTrie() {
        root = new WordTrieNode();
        root.worldEnd = false;
    }

    /**
     * 单例的信息
     */
    private static WordTrie wordTrie;

    /**
     * 获取 字典树 单例
     *
     * @return
     */
    public static WordTrie instance() {
        return wordTrie;
    }

    static {
        wordTrie = new WordTrie();
    }

    /**
     * 初始化数据
     */
    public void initData() {

    }

    /**
     * 插入一个词信息
     *
     * @param word
     */
    public void insert(String word) {
        WordTrieNode node = root;
        char c;
        for (int i = 0; i < word.length(); i++) {
            c = word.charAt(i);
            if (!node.childNode.containsKey(c)) {
                node = (WordTrieNode) node.childNode.put(c, new WordTrieNode());
            } else {
                node = (WordTrieNode) node.childNode.get(c);
            }
        }
        node.worldEnd = true;
    }

    /**
     * 查找这个词是不是 在屏蔽字库
     *
     * @param word
     * @return
     */
    public boolean search(String word) {
        WordTrieNode node = root;
        boolean found = true;
        char c;
        for (int i = 0; i < word.length(); i++) {
            c = word.charAt(i);
            if (!node.childNode.containsKey(c)) {
                return false;
            }
            node = (WordTrieNode) node.childNode.get(c);
        }
        return found && node.worldEnd;
    }
}
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值