A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mengxiang1993 中级黑马   /  2015-2-1 07:59  /  1226 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public static void main(String[] args) {
                Cat c1 = new Cat(6);
                Cat c2 = new Cat(8);
                List<Cat> list = new ArrayList<Cat>();
                list.add(c1);
                list.add(c2);
                for (int i = 0; i < list.size(); i++) {
                        System.out.println(list.get(i));

                }

                Collections.sort(list);
                System.out.println(list);

        }

}
输出结果
rank_cat.Cat@c17164
rank_cat.Cat@1fb8ee3
[rank_cat.Cat@c17164, rank_cat.Cat@1fb8ee3]

怎样才能输出c1,c2,对象名字呢?我知道应该重写toSting()方法,但怎样重写呢?


7 个回复

倒序浏览

回帖奖励 +1

因为你添加的是自定义对象集合,所以要重写toString(),由于你的对象Cat只有一个int类型成员,所以你就不重写compareTo方法。然后你就排序,这样是不严格,你看下排序的说明。根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
我改了下:

  1. import java.util.*;
  2. class Cat implements Comparable
  3. {
  4.         private String name;
  5.         private int age;
  6.         Cat(String name,int age)
  7.         {
  8.                 this.name = name;
  9.                 this.age = age;
  10.         }

  11.         public String toString()
  12.         {
  13.                 return this.name + "..." + this.age;
  14.         }

  15.         public int compareTo(Object obj)
  16.         {
  17.                 if(!(obj instanceof Cat))
  18.                         return -1;
  19.                 Cat cat = (Cat)obj;
  20.                 return this.name.compareTo(cat.name);
  21.         }
  22. }
  23. class  CatDemo
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                         Cat c1 = new Cat("a",6);
  28.                         Cat c2 = new Cat("b",8);
  29.                         List<Cat> list = new ArrayList<Cat>();
  30.                         list.add(c1);
  31.                         list.add(c2);
  32.                         for (int i = 0; i < list.size(); i++) {
  33.                                         System.out.println(list.get(i));
  34.                         }
  35.                         Collections.sort(list);
  36.                         System.out.println(list);
  37.         }
  38. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

回复 使用道具 举报
在对象里面定义获取方式就行
回复 使用道具 举报
你集合泛型定义的是cat类型的,所以你add是添加不进去的。只能add(new Cat(c1));
回复 使用道具 举报
来看看学习一下
回复 使用道具 举报
对象名字就是类名加hash值啊
回复 使用道具 举报
如果你非得输出对象名c1,c2,不妨这么做

// Cat 类
class Cat{
  private String className;

  public Cat(String className){ // 有参构造,参数用于保存对象名
    this.className = className;
  }

  public String toString(){
    // 这个方法的意思是:System.out.println(当前对象),控制台打印当前对象的className变量的值
    return className;
  }

  // 直接在这里写个main方法测试下就行
  public static void main(String[] args){
    Cat c1 = new Cat("c1"); // 把对象名作为参数传进去
    Cat c2 = new Cat("c2");
    List<Cat> list = new ArrayList<Cat>();
      list.add(c1);
      list.add(c2);
      System.out.println(list); // 输出来的就是c1、c2 (程序,弄透了,就是视觉欺骗而已,你可以任意妄为)
  }
}
回复 使用道具 举报 1 0
丨丶米饭 发表于 2015-2-1 10:15
如果你非得输出对象名c1,c2,不妨这么做

// Cat 类

谢谢,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马