fixbug WordTree覆写clear方法✒️

This commit is contained in:
大火yzs 2021-05-08 00:40:17 +08:00
parent 442d4bd854
commit ddf384884b
2 changed files with 36 additions and 1 deletions

View File

@ -321,5 +321,16 @@ public class WordTree extends HashMap<Character, WordTree> {
this.endCharacterSet.add(c);
}
}
/**
* 清除所有的词,
* 此方法调用后, wordTree 将被清空
* endCharacterSet 也将清空
*/
@Override
public void clear() {
super.clear();
this.endCharacterSet.clear();
}
//--------------------------------------------------------------------------------------- Private method end
}

View File

@ -101,6 +101,30 @@ public class DfaTest {
Assert.assertEquals("[women]", matchAll.toString());
}
@Test
public void clearTest(){
WordTree tree = new WordTree();
tree.addWord("");
Assert.assertTrue(tree.matchAll("黑大衣").contains(""));
//clear时直接调用Map的clear并没有把endCharacterSet清理掉
tree.clear();
tree.addWords("黑大衣","红色大衣");
//clear() 覆写前 这里想匹配到黑大衣但是却匹配到了黑
// Assert.assertFalse(tree.matchAll("黑大衣").contains("黑大衣"));
// Assert.assertTrue(tree.matchAll("黑大衣").contains(""));
//clear() 覆写后
Assert.assertTrue(tree.matchAll("黑大衣").contains("黑大衣"));
Assert.assertFalse(tree.matchAll("黑大衣").contains(""));
Assert.assertTrue(tree.matchAll("红色大衣").contains("红色大衣"));
//如果不覆写只能通过new出新对象才不会有问题
tree = new WordTree();
tree.addWords("黑大衣","红色大衣");
Assert.assertTrue(tree.matchAll("黑大衣").contains("黑大衣"));
Assert.assertTrue(tree.matchAll("红色大衣").contains("红色大衣"));
}
// ----------------------------------------------------------------------------------------------------------
/**
* 构建查找树