在我当前的项目中,我必须记录插入到TreeMap<String, TreeSet<Song>>
. 该项目是在一个字符串中运行单个单词的搜索,在这种情况下是歌词。我有三个测试来确定地图插入的过程,我的算法是:
- 测试单词是否有多个字符并且不是常用单词
- 如果 map 已经包含该单词作为键,则测试 set 是否已包含该歌曲
- 如果为真,则增加插入计数器
- 如果地图不包含单词作为键
- 创建新节点,添加歌曲设置
- 递增计数器
我将计数器声明private double insertions;
为类变量。
它在构造函数中初始化:
public SearchByLyricsWords(SongCollection sc) {
this.songs= sc.getAllSongs();
buildSongMap();
insertions=0;
totalReferences=0;
averageReferences=0;
}
buildMap 方法:
for (String word:currentLyrics) {
if (word.length()>1 && !commonWords.contains(word)) {
if (lyricWords.containsKey(word)) {
if (!lyricWords.get(word).contains(song))
insertions++; //this is a non-duplicate song in the set
lyricWords.get(word).add(song);
} else {
TreeSet<Song> songSet= new TreeSet<Song>();
songSet.add(song);
lyricWords.put(word, songSet);
keyWords.add(word);
insertions++;
}
//System.out.println(word+" added");
}
} //end loop through string
为什么在一个方法中修改了一个类变量,而不是在另一个方法中给出正确的值?