黑马程序员技术交流社区
标题:
[黑马云骚年]关于ArrayList中取出对象元素时的疑问
[打印本页]
作者:
江大海
时间:
2013-5-18 09:46
标题:
[黑马云骚年]关于ArrayList中取出对象元素时的疑问
本帖最后由 江大海 于 2013-5-18 10:46 编辑
为什么在迭代的时候不可以直接Person p = it.next()呢?it。next取出来的不就是person对象吗?
为什么还要各种转型
代码展示如下
------------------来自黑马云青年 大大大海
/*
需求:将自定义的对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象,同姓名同年龄视为同一人,为重复元素
思路:自定义Person类,创建对象存到ArrayList中,
判断姓名年龄是否相同,相同则不存入
取出集合
*/
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("张2",21));
al.add(new Person("张1",21));
al.add(new Person("张2",21));
al.add(new Person("张3",21));
al.add(new Person("张1",21));
al.add(new Person("张3",21));
for (Iterator it = al.iterator();it.hasNext() ; )
{
Object obj = it.next();//----------------------------问题在这里
Person p = (Person)obj;//it.next()取出的不就是Peason对象吗?为什么不可直接Person p = it.next();这样获取,还要各种转型呢??求解释
/*Person p = it.next();*/
sop(p.getName()+"--------"+p.getAge());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static ArrayList singleArr(ArrayList al)
{
ArrayList newAl = new ArrayList();
for (Iterator it = al.iterator();it.hasNext() ; )
{
//迭代器中一个hasNext只能对应一个next,不然就打印了两个
Object obj = it.next();
if (!newAl.contains(obj))
newAl.add(obj);
}
return newAl;
}
}
复制代码
作者:
石贤芝
时间:
2013-5-18 09:56
那是因为在代码的第32行: ArrayList al = new ArrayList(); 你没有声明泛型(也就是要告诉编译器:ArrayList 要存储什么类型的对象)。
如果没有声明泛型,ArrayList 集合默认存储Object类型的对象,所以 it.next() 取出的当然是Object类型的,不是Person类型的,所以第43行就要转型了。
如果第32行代码改为 ArrayList<Person> al = new ArrayList<Person> (); 这样声明泛型之后,43行就不需要强转类型了。
。。。。黑马云青年,为您作答。。。。
作者:
韩秀山
时间:
2013-5-18 10:18
it.next()取出的不就是Peason对象吗:p.getName()+"--------"+p.getAge():Object中没有 getName() 和 getAge() 方法,List集合中你没有定义泛型,他默认存储的是Object;类型。
根据多态的特性,父类对象想要调用子类中的方法,把父类的类型强转成子类类型。才能调用getName() 和 getAge() 方法。希望能对你有帮助!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2