我从文本文件中读取单词,然后为每个单词创建一个新对象并将这些对象存储到arraylist中。单词的文本作为参数传递到对象中。我已经覆盖了单词类的equals和hashcode方法,以根据单词的文本而不是对象的存储位置检查对象的相等性。我试图将所有唯一单词存储在arraylist中作为唯一对象,并且如果单词在文本文件中重复出现,则会增加单词对象的出现。
Scanner file = new Scanner(new File(textfile));
ArrayList<Word> words=new ArrayList<Word>();
while (file.hasNext()) {
Word w = new Word(fileWord);
if(words.contains(w)){
w.increaseCount();
}
else{
words.add(w);
}
}
}
词类
public class Word {
private String text;
private int count;
public word(String wordText){
text=wordText;
}
public void increaseCount(){
count+=1;
}
@Override
public boolean equals(Object wordToCompare){
if(wordToCompare instanceof Word){
Word castedWord = (Word)wordToCompare;
if(castedWord.text.equals(this.text)){
return true;
}
}
return false;
}
@Override
public int hashCode(){
return text.hashCode();
}
唯一的单词被添加到arraylist中,但是我的数量没有增加。如何增加计数
问题是您在循环中创建Word的新实例。当数组包含新创建的Word时,将增加它的计数,而不是之前已经添加到数组中的现有实例的计数。考虑使用Set来解决问题,关键是单词,值是计数。