TreeMap, позволяющий поместить в него только один элемент? - PullRequest
1 голос
/ 02 декабря 2009

Я занимаюсь разработкой приложения на Java и впервые использую TreeMap. Программа должна отслеживать количество появлений каждого слова в текстовом файле. Однако у меня возникают проблемы при помещении данных в TreeMap.

Это прекрасно работает, когда я использую тот же точный код для помещения данных в HashMap, но мне нужно, чтобы данные были отсортированы по значению.

Я работаю над этим в течение двух дней, и я полностью в замешательстве! Любой совет будет принята с благодарностью.

Я разработал небольшой пример кода, чтобы продемонстрировать проблему:

Слово класс:

public class impents Comrable {


 public Wo (String s) {
    this.tesdxt = s;
    thnt = 1;
 }


public int coeTo (Object x) { 
  sd
    if (thiunt < temp.count){
        ret
        return 1;
    }sd
}       

public void inemnt(){
    this.cot++;
}


public bolean equals(Object obj){
  d temp= ((ls(temp.text) &&
    this.unt == temp.count;
}

public int hashCode(){
    return this.tshCode() + 
 Integer.toSsdtring(count).hashCode();
}s

public String toString(){
    return this.text;
}
}

Считает класс:

 public class Counts{


 public Counts () { }

 public iutTest(){
      for(int i = 0; i < 5; i++){
           sortedCoun.put(new Word("testWord #"+i), 1);
      }
      return sortedWordCounts.size();
}

}

Класс компаратора:

public class Sorteparator impleWord,Integer> map) {
     this.map = map;
}

 public int compare(Object o1, Object o2) {
 if(!map.consKey(o1) || !map.coninsKey(o2)) {
      return 0;
 }

 if(mapet(o1) < map.get(o2)) {
      retrn ap.get(o2)) {
      return 0;
 } ee {
      return -1;
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 02 декабря 2009

Есть много проблем с вашим кодом.

Во-первых, TreeMap упорядочен по его ключам; не его значения.

Во-вторых, вы не можете использовать что-либо в качестве ключа, если его значение может измениться в Map или Set (где значение влияет на контракт метода equals ()).

В-третьих, вы не должны реализовывать equals () без реализации hashCode ().

Это должно помочь вам в этом!

0 голосов
/ 02 декабря 2009

Ваш compareTo() говорит, что два Слова равны, если они имеют одинаковое количество. Следовательно, Древовидная карта считает, что вы вводите 5 одинаковых объектов, и сохраняет только один. Я не уверен, почему у вас есть счетчик как часть Word, кажется, что он соответствует тому, для чего вы используете древовидную карту.

...