11章-练习22


import java.util.*;

/**
* 练习22:修改前一个练习,使其用一个包含有一个String域和一个计数域的类来存储每个不同的单词,并使用一个由这些对象构成的Set来维护单词列表。
*/
public class Exercise22 {

public static void main(String[] args) {

Set<WordWithNum> set = new HashSet<WordWithNum>();
List<String> wordList = new TextFile("SetOperations.java", "\\W+");

for (String word : wordList) {
Iterator<WordWithNum> it = set.iterator();
WordWithNum wordNum = new WordWithNum();
wordNum.setWord(word);
if (set.contains(wordNum)) {
while (it.hasNext()) {
WordWithNum w = it.next();
if (w.getWord().equals(word)) {
w.addNum();
}
}
} else {
wordNum.setNum(1);
}
set.add(wordNum);
}
System.out.println(set);
}
}

/**
* 需要重写equals方法,判断是否是同一个word
*/
class WordWithNum {

private String word;
private Integer num;

public void addNum() {
num++;
}

public String getWord() {
return word;
}

public void setWord(String word) {
this.word = word;
}

public Integer getNum() {
return num;
}

public void setNum(Integer num) {
this.num = num;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WordWithNum wordNum = (WordWithNum) o;
return Objects.equals(word, wordNum.word);
}

@Override
public int hashCode() {
return Objects.hash(word);
}

@Override
public String toString() {
return "WordNum{" +
"word='" + word + '\'' +
", num=" + num +
'}';
}
}
/* Output:
[WordNum{word='package', num=1}, WordNum{word='void', num=1}, WordNum{word='false', num=2}, WordNum{word='print', num=8}, WordNum{word='contains', num=2}, WordNum{word='util', num=3}, WordNum{word='set2', num=11}, WordNum{word='added', num=2}, WordNum{word='to', num=2}, WordNum{word='set1', num=23}, WordNum{word='true', num=2}, WordNum{word='com', num=2}, WordNum{word='import', num=4}, WordNum{word='SetOperations', num=2}, WordNum{word='example', num=2}, WordNum{word='demo', num=2}, WordNum{word='Print', num=1}, WordNum{word='split', num=3}, WordNum{word='class', num=1}, WordNum{word='public', num=2}, WordNum{word='Output', num=1}, WordNum{word='HashSet', num=3}, WordNum{word='new', num=2}, WordNum{word='static', num=2}, WordNum{word='add', num=1}, WordNum{word='in', num=4}, WordNum{word='containsAll', num=2}, WordNum{word='elevensection', num=2}, WordNum{word='args', num=1}, WordNum{word='Set', num=3}, WordNum{word='A', num=4}, WordNum{word='B', num=4}, WordNum{word='C', num=4}, WordNum{word='D', num=4}, WordNum{word='E', num=4}, WordNum{word='F', num=4}, WordNum{word='G', num=4}, WordNum{word='H', num=6}, WordNum{word='I', num=3}, WordNum{word='J', num=3}, WordNum{word='remove', num=1}, WordNum{word='String', num=5}, WordNum{word='addAll', num=3}, WordNum{word='K', num=3}, WordNum{word='main', num=1}, WordNum{word='L', num=3}, WordNum{word='removed', num=2}, WordNum{word='M', num=4}, WordNum{word='N', num=3}, WordNum{word='holding', num=1}, WordNum{word='java', num=4}, WordNum{word='removeAll', num=1}, WordNum{word='X', num=4}, WordNum{word='Y', num=4}, WordNum{word='from', num=2}, WordNum{word='Z', num=4}, WordNum{word='Collections', num=4}]
*///:~
posted @ 2022-08-25 14:25  loadL  阅读(17)  评论(0)    收藏  举报