用java写的trie tree主要是在写spider的时候,需要存储解析出的网页的url,判断是否已经处理过或已经加入等待处理的url队列,避免出现网页的url出现循环,使用trietree的最大的有点就是节约存储空间;包括两个方法:一是find,查找相应的string是否已经出现过;二是add,把不存在的string加入到TrieTree。
下面是源代码:
1 package com.base; 2 3 class TrieTreeNode{ 4 public String str=null; 5 Object[] children=new Object[128]; 6 } 7 8 public class TrieTree { 9 private TrieTreeNode topNode=new TrieTreeNode(); 10 11 public boolean findNode(String strNode){ 12 //查找trietree中是否有要查找的字符串 13 TrieTreeNode node=topNode; 14 for(int i=0;i<strNode.length();++i){ 15 if(node.children[(int)strNode.charAt(i)]!=null){ 16 node=(TrieTreeNode)node.children[(int)strNode.charAt(i)]; 17 }else return false; 18 } 19 if(node.str!=null && node.str.equals("1")) return true; 20 else return false; 21 } 22 23 24 public void addNode(String strNode){ 25 //把遇到的字符串加入到trieTree 26 TrieTreeNode node=topNode; 27 TrieTreeNode temp; 28 for(int i=0;i<strNode.length();++i){ 29 if(node.children[(int)strNode.charAt(i)]==null){ 30 temp=new TrieTreeNode(); 31 node.children[(int)strNode.charAt(i)]=temp; 32 } 33 node=(TrieTreeNode) node.children[(int)strNode.charAt(i)]; 34 } 35 36 node.str="1";//1代表在trietree中加入这个节点,标记其存在 37 // if(node.children[strNode.length()]==null){ 38 // temp=new TrieTreeNode(); 39 // temp.str="1";//1代表在trietree中加入这个节点,标记其存在 40 // node.children[(int)strNode.charAt(strNode.length()-1)]=temp; 41 // } 42 43 } 44 }