黑马程序员技术交流社区

标题: 求助,用迭代器遍历时类型转换问题 [打印本页]

作者: trhthyj    时间: 2014-3-25 14:40
标题: 求助,用迭代器遍历时类型转换问题
这个用迭代器遍历集合元素,为什么要强制转换类型,毕老师说过了但是还是不太明白,求详 解!
作者: yanzhendong    时间: 2014-3-25 15:01
al集合中存储的是Object对象,当将Person对象存入al集合中时已经转换成了Object对象,所以取出来时要造型,如果不想取出来时进行造型,可以在声明al集合时声明可以存入集合中的对象类型,就像这样:ArrayList<Person>al=new ArrayList<Person>();
作者: 赵彦丰    时间: 2014-3-25 15:18
本帖最后由 赵彦丰 于 2014-3-25 15:19 编辑

我的理解 如果不对请指正 下面的代码总找三点:

第一点 存到集合中 是Object的

第二点 取出数据是通过Person 中的方法取出得 所以就必须吧Object 转 成Person

第三点 就是强制转换了

  1. /*
  2. *
  3. * 往hashSet集合中存入自定对象
  4. * 姓名和年龄相同为同一个人,重复元素
  5. * */
  6. import java.util.*;

  7. class HashSetTest
  8. {
  9.         public static void sop(Object obj)
  10.         {
  11.                 System.out.println(obj);
  12.         }
  13.         public static void main(String[] args)
  14.         {
  15.                 HashSet hs = new HashSet();//第一点
  16.                 hs.add(new Person("a1",11));
  17.                 hs.add(new Person("a2",12));
  18.                 hs.add(new Person("a3",13));
  19.                 hs.add(new Person("a2",12));
  20.                
  21.                 sop(hs.remove(new Person("a1",11)));
  22.                
  23.                 Iterator it = hs.iterator();
  24.                 while(it.hasNext())
  25.                 {
  26.                         Person p = (Person)it.next();//第三点
  27.                         sop(p.getName()+"---"+p.getAge());        
  28.                 }
  29.                
  30.                
  31.         }
  32.         
  33.                
  34. }
  35. class Person
  36. {
  37.         private String name;//第二点
  38.         private int age;
  39.         Person(String name,int age)
  40.         {
  41.                 this.name = name;
  42.                 this.age = age;
  43.         }
  44.         
  45.         public int hashCode()
  46.         {
  47.                 System.out.println(this.name+"--hashCode");
  48.                 return name.hashCode()+age;
  49.         }
  50.         
  51.         public boolean equals(Object obj)
  52.         {
  53.                 if(!(obj instanceof Person))
  54.                         return false;
  55.                 Person p = (Person)obj;
  56.                 System.out.println(this.name+"----"+p.name);
  57.                
  58.                 return this.name.equals(p.name) && this.age == p.age;
  59.         }
  60.         
  61.         public String getName()
  62.         {
  63.                 return name;
  64.         }
  65.         
  66.         public int getAge()
  67.         {
  68.                 return age;
  69.         }
  70. }

复制代码

作者: 月影释    时间: 2014-3-25 15:54
你注释不是写的很清楚么  有个类型下降的过程 。以后学泛型就不用这样了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2