黑马程序员技术交流社区
标题:
求解答,一个关于list的问题
[打印本页]
作者:
mengxiang1993
时间:
2015-2-1 07:59
标题:
求解答,一个关于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,对象名字呢?我知道应该重写toSting()方法,但怎样重写呢?
作者:
邓士林
时间:
2015-2-1 08:39
因为你添加的是自定义对象集合,所以要重写toString(),由于你的对象Cat只有一个int类型成员,所以你就不重写compareTo方法。然后你就排序,这样是不严格,你看下排序的说明。根据元素的
自然顺序
对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是
可相互比较的
(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
我改了下:
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);
}
}
复制代码
作者:
艺多不压身丶
时间:
2015-2-1 08:47
在对象里面定义获取方式就行
作者:
艺多不压身丶
时间:
2015-2-1 08:51
你集合泛型定义的是cat类型的,所以你add是添加不进去的。只能add(new Cat(c1));
作者:
jwl245322883
时间:
2015-2-1 09:42
来看看学习一下
作者:
d342784178
时间:
2015-2-1 09:50
对象名字就是类名加hash值啊
作者:
丨丶米饭
时间:
2015-2-1 10:15
如果你非得输出对象名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 (程序,弄透了,就是视觉欺骗而已,你可以任意妄为)
}
}
作者:
mengxiang1993
时间:
2015-2-11 15:47
丨丶米饭 发表于 2015-2-1 10:15
如果你非得输出对象名c1,c2,不妨这么做
// Cat 类
谢谢,明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2