如果对象存在于arraylist中,则增加计数,否则将对象添加到arraylist中

问题描述 投票:0回答:1

我从文本文件中读取单词,然后为每个单词创建一个新对象并将这些对象存储到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中,但是我的数量没有增加。如何增加计数

java arraylist java.util.scanner equals
1个回答
0
投票

问题是您在循环中创建Word的新实例。当数组包含新创建的Word时,将增加它的计数,而不是之前已经添加到数组中的现有实例的计数。考虑使用Set来解决问题,关键是单词,值是计数。

© www.soinside.com 2019 - 2024. All rights reserved.