黑马程序员技术交流社区

标题: 关于list输出的问题 [打印本页]

作者: mengxiang1993    时间: 2015-1-31 18:35
标题: 关于list输出的问题
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,对象名字呢?



作者: lwj123    时间: 2015-2-1 14:05
Cat没有重写Object的toString()方法就默认调用Object的toString()方法
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())

若是想输出特定的信息,就的重写该方法


作者: wf111sxwf    时间: 2015-2-1 22:27
覆盖toString方法 把你想看到的结果写到方法中即可
作者: 邓士林    时间: 2015-2-1 22:41
我记得早上我出去的时候,我已经回复此贴了啊!怎么没显示啊!如同二楼说的,任何类的上帝都是Object,如果我们不重写override就调用Object的toString()方法。既然Object是所有类的上帝,所以它为了满足所有的类,就有了自己toString()的形式,不管任何类,只要你不重写toString,我一律按照我的输出形式来,该方法返回一个字符串,它的值等于: (二楼的)
getClass().getName() + '@' + Integer.toHexString(hashCode())

另外对于你的一个方法Collection.sort的使用,要注意该方法的要求。
sortpublic static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。
这点要注意,这是我针对你的需求,改进的代码:
  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. }
复制代码





作者: mengxiang1993    时间: 2015-2-2 09:32
邓士林 发表于 2015-2-1 22:41
我记得早上我出去的时候,我已经回复此贴了啊!怎么没显示啊!如同二楼说的,任何类的上帝都是Object,如果 ...

谢谢,大概明白了,想知道这个sort()方法内部是怎么实现的,我想应该会调用equals方法吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2