/** * */ package org.wltea.analyzer.dic; import java.util.HashMap; import java.util.Map; /** * IK Analyzer v3.2 * 字典子片断 字典匹配核心类 * 该类采用 数组 结合 HashMap,实现词典存储,词语匹配 * * 当下属的页节点小等于3时,采用数组存储 * 当下属的页节点大于3时,采用HashMap存储 * @author 林良益 * */ public class DictSegment { //公用字典表,存储汉字 private static final Map<Character , Character> charMap = new HashMap<Character , Character>(16 , 0.95f); //数组大小上限 private static final int ARRAY_LENGTH_LIMIT = 3; //当前节点上存储的字符 private Character nodeChar; //Map存储结构 private Map<Character , DictSegment> childrenMap; //数组方式存储结构 private DictSegment[] childrenArray; //当前节点存储的Segment数目 //storeSize <=ARRAY_LENGTH_LIMIT ,使用数组存储, storeSize >ARRAY_LENGTH_LIMIT ,则使用Map存储 private int storeSize = 0; //当前DictSegment状态 ,默认 0 , 1表示从根节点到当前节点的路径表示一个词 private int nodeState = 0; public DictSegment(Character nodeChar){ if(nodeChar == null){ throw new IllegalArgumentException("参数为空异常,字符不能为空"); } this.nodeChar = nodeChar; } public Character getNodeChar() { return nodeChar; } /* * 判断是否有下一个节点 */ public boolean hasNextNode(){ return this.storeSize > 0; } /** * 匹配词段 * @param charArray * @return Hit */ public Hit ma