我注意到将元素添加到列表中确实会更改其哈希键值,因此无法再次访问它,因为.contains(modifiedObject)
此处不会发生冲突。我没想到这种行为是诚实的。让我想知道HashSet
其散列是如何进行的..因此,如何确保在修改例如字符串列表时不破坏我HashSet
的字符串,如下所示。有没有一种方法可以做到这一点,还是作为程序员我必须注意的事情?
private HashSet<List<String>> bagOfWordsMap = new HashSet<List<String>>();
private void createBagOfWordsList(UnifiedTag[] invalidTags) {
for(List<String> sentences : getSentenceList()) {
List<String> sentenceStemWords = new ArrayList<String>();
// Not what you would want to do since sentenceStemWords is
// modified right after and bagOfWordsMap.contains(sentenceStemWords)
// won't collide again:
// bagOfWordsMap.add(sentenceStemWords);
for(String word : sentences) {
String stem = Stemmer.getStem(word);
sentenceStemWords.add(stem);
}
bagOfWordsMap.add(sentenceStemWords);
}
}
实施冻结的类型不能修改了,如果你要防止修改的意外!
HashSet.get
获取当前成员,只有一个contains
。另外,它的风格很差而且很脆弱。最好将此类对象分解为关键值。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句