我有以下方法:

     public final NavigableSet<AnimalCard> getCowTradeCardsSorted() {
    TreeMap<AnimalCard,AnimalCard> ssa = new TreeMap<AnimalCard,AnimalCard>();
    Iterator<E> i = this.cowTradeCards.iterator();
    System.out.println("Input is:"+this.cowTradeCards.toString());
    while (i.hasNext()) {
        E a = i.next();
        System.out.println("Adding 2 ssa:"+a.toString());

        ssa.put((AnimalCard) a ,(AnimalCard) a); //this.getCountOfOneCard(a));
        System.out.println("ssa is now"+ssa.toString());

    }
    System.out.println("returnvalue is"+ ssa.descendingKeySet().toString());
    return ssa.descendingKeySet().descendingSet();
}


我希望将以下输出作为返回值:[1000,500,160,10]

但我得到[1000]

这是输出fom控制台:

   Input is:[1000, 10, 160, 500]
   Adding 2 ssa:1000
   ssa is now{1000=1000}
   Adding 2 ssa:10
   ssa is now{1000=10}
   Adding 2 ssa:160
   ssa is now{1000=160}
   Adding 2 ssa:500
   ssa is now{1000=500}
   returnvalue is[1000]


怎么了?它看起来像树图将所有值绑定到第一个键?

ps:this.cowtradecards是一个数组列表,但实际上没关系

    public class AnimalCard extends Card { ..........

      // super has this :public int getValue() {
  //        return this.value;
  //       }


    @Override
public int compareTo(Object o) {
    // Pufferelement vom Typ AnimalCard
    AnimalCard buffer;

    // Kontrolle, ob übergebenes Objekt vom Typ "AnimalCard" ist
    if (o instanceof MoneyCard) {   <--------------- here is the error !!!!! should be AnimalCard !
        // wenn ja, dann Typcasting vornehmen
        buffer = (AnimalCard) o;

        if (super.getValue() < buffer.getValue()) {
            return -1;
        }
        if (super.getValue() > buffer.getValue()) {
            return 1;
        }
        return 0;
    } else {
        // not an "AnimalCard"

    }
    return 0;
}

after i fixed the compareto:
    Input is:[1000, 10, 160, 500]
    Adding 2 ssa:1000
    ssa is now{1000=1000}
    Adding 2 ssa:10
    ssa is now{10=10, 1000=1000}
    Adding 2 ssa:160
    ssa is now{10=10, 160=160, 1000=1000}
    Adding 2 ssa:500
    ssa is now{10=10, 160=160, 500=500, 1000=1000}
    returnvalue is[1000, 500, 160, 10]

最佳答案

该问题可能与compareTo中的AnimalCard有关。请检查compareTo是否按照您的预期做,并根据此方法将两个编号不同的AnimalCard实例视为不相等(即,在这种情况下,它不会返回0)。如果是的话,那将解释您的结果,因为TreeMap只会更新现有的条目,而不是添加新的条目。

另外,如果您正在调试,则可能需要打印put()的返回值(它可以使您对正在发生的事情有一些了解)。

07-24 18:42
查看更多