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方法。