Ваш метод equals
и compareTo
ведет себя по-разному для одного и того же ввода. Например,
Word w1 = new Word("Word");
Word w2 = new Word("word");
System.out.println(w1 == w2);
System.out.println(w1.equals(w2));
System.out.println(w1.compareTo(w2));
даст
false
true
0
HashSet использует метод equals
для сравнения ключей, в то время как TreeSet будет использовать метод compareTo
для проверки эквивалентности ключей. Поскольку ваша реализация неверна, для другого сценария ios hashset будет обрабатывать ключи как разные, в то время как treeset может рассматривать их как одинаковые.
Чтобы узнать, какие значения обрабатываются TreeSet как одинаковые, вы можете напечатать результат добавления в наборы. Оба возвращают значение true, если ключ не существует, в противном случае возвращается значение false.
while(read.hasNext()) {
Word word = new Word(read.next());
System.out.println(hashSet.add(word));
System.out.println(treeSet.add(word));
}