泛型相关之Arrays

本文探讨了在处理对象列表时,如何利用泛型简化数组操作。通过对比传统方式,指出泛型如何避免繁琐的数组扩展,并且强调了在使用泛型时,如果对象未重写toString方法,将默认打印对象地址,因此建议重写toString以获得预期的输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Arrays

当我们需要存取某个对象的列表的时候,比如Person,可以创建一个Person类的数组,然后一个一个地存入,再用Arrays.toString()输出。
因为数组的长度在创建的时候就被规定好了,所以在加入的时候需要新建数组把原数组放入以及把新元素加入。

//when you define a class of Person 
//Person have name and age constructor
//then you can do this
Person p1 = new Person("xiaoming",12);
Person p2 = new Person("xiaohong",14);

Person[] man = { p1 , p2 };//创建数组
System.out.println(man);//输出地址
System.out.println(Arrays.toString(madMen));//输出内容

Person p3 = new Person("xiaoxiao",15);
man[2] = p3;
System.out.println(Arrays.toString(man));
//此时因为数组大小限制,不能再赋值输入了
//如果在这个时候我们还需要加入这个值,就需要在新建一个length = array.length+1;的数组来承接它

//比如在主方法中
private static Person[] add(final Person person , Person[] array){
final int length = array.length;
array = Arrays.copyOf(array,length+1);//新建一个长度+1的数组,且复制之前内容
array[length] = person;
return array;
}

这是不是有点,,,麻烦?

我们来看一看泛型是如何解决这个问题的。

Person p1 = new Person("xiaoming",12);
Person p2 = new Person("xiaohong",14);

List<person> men = new ArrayList<Person>();
men.add(p1);
men.add(p2);
System.out.println(men);
//简单几句,就可以实现和上面相同的信息输出
men.add(new Person("xiaohong",100));
System.out.println(men);
//这样就完成了一个新的person类对象信息的添入
//add方法会自动调节列表的大小

//这样很安全,而当我们输入一个person之外 的类的时候,系统会报错,比如
men.add(new Object());//系统报错
//------------------------------
//一些其他的方法

System.out.println(men);//打印列表
System.out.println(men.size());//打印列表的长度
System.out.println(men.get(0));//打印men中的第0个对象元素
//其实list.get()方法返回的是一个对象
final Person person = men.get(2);// this is a interface?

// you also can do this

for (int i = 0 ; i< men.size();i++){
final Person person = men.get(i);
System.out,println(person);
}
//循环打印出list中的每一个成员对象

//但实际上,不必通过索引调用它,有更高级的功能,Iterator!

final Iterator<Person> iterator = men.iterator();
iterator.hasNext();// return true or false
iterator.next();// return value

while(iterator.hasNext()){
final Iterator<Person> iterator = men.iterator();
iterator.next;
}

// or you can run this way 
for (Person person : men){
	System.out.println(person);
	}


你甚至可以不需要添加泛型的类型,直接用<>,而编译器自动从输入的上下文中去判断类型

List<person> men = new ArrayList<Person>();
List<person> men = new ArrayList<>();
//这两个的效果是一样的

唯一要注意的一点是,在对Person的定义之中,要重写toString,不然输出的就是地址了!!!!!!

因为System.out.println(Object);调用的是对象的toString方法,而Object默认的toString方法是返回该对象的地址。所以,使用java的时候一般都会重写toString方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值