Dog.java代码如下:
package com.easyjava.sample;/**
 * @author 笔者 本类为演示如何编写狗的类 狗类,用于ArrayList实验用
 */
public class Dog implements Comparable { // 狗的颜色,默认为黄色
private String color = "黄色";
// 狗的年纪,默认为1岁
private int age = 1;
// 狗的名字 默认为 花花
private String name = "花花";
public Dog() {
} /**
 * 构造方法 更快的生产,生产时就取名,上色,给年纪
 */
public Dog(String color, int age, String name) {
this.color = color;
this.age = age;
this.name = name;
} /**
 * bark方法,模拟狗叫
 */
public void bark() {
String voice = "汪、汪、汪";
StringBuffer out = new StringBuffer();
out.append(color + "的");
out.append(age + "岁的");
out.append(name + "叫了");
out.append(voice);
System.out.println(out.toString()); } public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} /**
 * 因为是按年纪排序,所以本方法仅比较年纪 
 * 本方法是Comparable接口要求实现的方法。在进行比较时,将会调用到本方法
 * 
 * @param arg0
 *            与当前对象进行比较的对象
 * @return 返回值为正数,表示本对象比传入对象大,为零表示相等,为负数表示小于传入对象
 */
public int compareTo(Object arg0) { int ret = 1;
// 仅跟狗比较,如果不是狗,不进行比较
if (arg0 instanceof Dog) {
Dog temp = (Dog) arg0;
// 返回值为本对象的年纪减去传入对象的年纪
ret = this.age - temp.getAge();
} return ret;
}}
ArrayListTest.java代码如下:
package com.easyjava.sample.list;import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;import com.easyjava.sample.Dog;/**
 * @author 笔者 测试ArrayList
 */
public class ArrayListTest { /**
 * @param args
 */
public static void main(String[] args) {
// 创建一个ArrayList
ArrayList warehouse = new ArrayList(11); // 放入狗对象
warehouse.add(new Dog());
// 放一只狗到第2个位置
warehouse.add(1, new Dog("yellow", 11, "大花"));
//指定位置从ArrayList中取出数据
Dog dog = (Dog) warehouse.get(1);
//看看取出来的是哪只狗
dog.bark();

//指定位置移除
Dog dogremove = (Dog)warehouse.remove(0);
//看看移除的是什么
dogremove.bark();


//创建一个上帝的的狗仓库
List godsWareHouse = new ArrayList(5);
//创建几只小狗
Dog daHuang = new Dog("yellow", 11, "大黄");
godsWareHouse.add(daHuang);
Dog aHua = new Dog("red", 1, "阿花");
godsWareHouse.add(aHua);
Dog miLi = new Dog("green", 14, "米粒");
godsWareHouse.add(miLi);

Dog temp;
//用类似数组的方式进行迭代
for(int i = 0; i < godsWareHouse.size(); i++)
{
temp = (Dog)godsWareHouse.get(i);
temp.bark();
}

//使用迭代器来迭代
for(Iterator it = godsWareHouse.iterator(); it.hasNext();)
{
temp = (Dog)it.next();
temp.bark();
}

//for的Java5特有用法
for(Object obj : godsWareHouse)
{
((Dog)obj).bark();
}

Collections.sort(godsWareHouse);
System.out.println("狗狗也要排排队");

//排序后迭代看看
//for(Object obj : godsWareHouse)
//{
// ((Dog)obj).bark();
//}

//测试LinkedList
//LinkedList queue = new LinkedList();
    //queue.addFirst("Bernadine");
   // queue.addFirst("Elizabeth");
    //queue.addFirst("Gene");
   // queue.addFirst("Elizabeth");
   // queue.addFirst("Clara");
    //System.out.println(queue);
    //queue.removeLast();
   // queue.removeLast();
   // System.out.println(queue);
}}
我用的是MyEclipse 6.5运行ArrayListTest.java时总显示
到static块了
简单制造
有参数的制造
yellow的11岁的大花叫了汪、汪、汪
黄色的1岁的花花叫了汪、汪、汪
有参数的制造
有参数的制造
有参数的制造
yellow的11岁的大黄叫了汪、汪、汪
red的1岁的阿花叫了汪、汪、汪
green的14岁的米粒叫了汪、汪、汪
yellow的11岁的大黄叫了汪、汪、汪
red的1岁的阿花叫了汪、汪、汪
green的14岁的米粒叫了汪、汪、汪
yellow的11岁的大黄叫了汪、汪、汪
red的1岁的阿花叫了汪、汪、汪
green的14岁的米粒叫了汪、汪、汪
Exception in thread "main" java.lang.ClassCastException: com.easyjava.sample.Dog cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Arrays.java:1144)
at java.util.Arrays.sort(Arrays.java:1079)
at java.util.Collections.sort(Collections.java:117)
at com.easyjava.sample.list.ArrayListTest.main(ArrayListTest.java:69)
请问如何解决,谢谢!

解决方案 »

  1.   

    补充:如果注释掉Collections.sort(godsWareHouse); 
    则程序就能运行了。说明问题出在Collections.sort(godsWareHouse); 
    这一句上。
      

  2.   

    你的这个类没有实现java.lang.Comparable这个接口,因此不能对这个对象进行排序
      

  3.   

    楼主,你的错误在重写的compareTo比较方法里.
    这个方法是要返回0 1 或者-1的.
    API里说的很清楚:
    Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.而不是你注释里写的,返回值为本对象的年纪减去传入对象的年纪.java的这个比较器不是这样用的.另外给你点编程上面的建议
    1.把ArrayListTest里集合的泛型补充完整.
    2.public class Dog implements Comparable {
    改成public class Dog implements Comparable<Dog> {
    这样在compareTo方法中就不要强转了!
    打这么多,希望你能理解,我语言组织能力比较差!