TreeMap中的ClassCastException

时间:2011-10-04 08:29:56

标签: java android

我总是得到一个ClassCastException。我还想通过键(pizza.title alphabetical)

对Treemap进行排序

代码:

public class Pizza implements Comparable<Pizza> {

    public String title;
    public int rate;
    public String date;
    public Bitmap picture;
    public int id;
    @Override
    public int compareTo(Pizza another) {
        // TODO Auto-generated method stub
        return this.title.compareTo(another.title);
    }

}

通话:

for (Pizza pizza : list) {

            if(map.containsKey(pizza))
            {

                int i = map.get(pizza.title);
                map.remove(pizza.title);

                map.put(pizza, i++);
            }
            else
            {
                map.put(pizza, 1);
            }
          }

错误:

10-04 08:27:19.865: ERROR/AndroidRuntime(722): Caused by: java.lang.ClassCastException: com.korn.pizzacounter.Pizza

3 个答案:

答案 0 :(得分:8)

您使用TreeMap

的关键字似乎不一致

您使用containsKey对象致电Pizza,但使用get致电removeString

TreeMap中的所有键必须相互比较。由于您的Pizza课程不是Comparable<String>,因此无效。

答案 1 :(得分:2)

  

map.get(pizza.title);

我猜你的地图声明会是 Map<String,Integer>

因此请使用pizza.title作为Map#putMap#containsKey等方法的关键。

答案 2 :(得分:1)

地图是从键到值

查看您的代码,您的地图是从披萨到整数(基于您map.put(pizza.title)的事实)

当你执行get时,你需要提供一个比萨来获得int,但是你正在给pizza.title,这就是你获得类投射异常的地方。

您可以为其指定pizza,也可以将地图类型更改为字符串为int(例如Map<String,Integer>