黑马程序员技术交流社区
标题:
关于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的使用,要注意该方法的要求。
sort
public static <T extends Comparable<? super T>> void
sort
(List<T> list)根据元素的
自然顺序
对指定列表按升序进行排序。
列表中的所有元素都必须实现 Comparable 接口
。此外,
列表中的所有元素都必须是
可相互比较的
(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
此排序方法具有
稳定性
:不会因调用 sort 方法而对相等的元素进行重新排序。
这点要注意,这是我针对你的需求,改进的代码:
import java.util.*;
class Cat implements Comparable
{
private String name;
private int age;
Cat(String name,int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return this.name + "..." + this.age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Cat))
return -1;
Cat cat = (Cat)obj;
return this.name.compareTo(cat.name);
}
}
class CatDemo
{
public static void main(String[] args)
{
Cat c1 = new Cat("a",6);
Cat c2 = new Cat("b",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);
}
}
复制代码
作者:
mengxiang1993
时间:
2015-2-2 09:32
邓士林 发表于 2015-2-1 22:41
我记得早上我出去的时候,我已经回复此贴了啊!怎么没显示啊!如同二楼说的,任何类的上帝都是Object,如果 ...
谢谢,大概明白了,想知道这个sort()方法内部是怎么实现的,我想应该会调用equals方法吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2