黑马程序员技术交流社区

标题: 集合中的疑惑。。。 [打印本页]

作者: 坚强    时间: 2011-11-17 14:58
标题: 集合中的疑惑。。。
  1. import java.util.*;  //14--11
  2. class  ArrayListTest2
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                  ArrayList al = new ArrayList();
  7.                  al.add(new Person("lisi01",22));
  8.                  al.add(new Person("lisi01",22));
  9.                  al.add(new Person("lisi02",242));
  10.                  al.add(new Person("lisi03",252));
  11.                  al.add(new Person("lisi04",262));
  12.             
  13.           Iterator it=al.iterator();
  14.                   while (it.hasNext())
  15.                   {
  16.               Person p=(Person)it.next();
  17.                           sop(p.getName()+""+p.getAge());
  18.                   }
  19.         }
  20.         public static void sop(String a)
  21.         {
  22.           System.out.println(a);
  23.         }
  24. }
  25. class Person
  26. {
  27.         private String name;
  28.         private int age;
  29.         Person(String name,int age)
  30.         {
  31.           this.name=name;
  32.           this.age=age;
  33.         }
  34.         public boolean equals(Object j)
  35.         {
  36.            if(!(j instanceof Person))
  37.                    return false;
  38.            Person h=(Person)j;
  39.            return this.name.equals(h.name)&& this.age==h.age;
  40.         }
  41.         public String getName()
  42.         {
  43.            return name;
  44.         }
  45.         public int getAge()
  46.         {
  47.            return age;
  48.         }
  49. }
复制代码
我想知道为什么在Person中定义的equals方法不需要调用,就会自动运行?如果是在ArrayList添加元素的时候判断的,那么为什么要定义在对象类中,不可以像TreeSet那样定义在构造函数中,或者其他地方吗?鉴于ArrayList没有可以指定排序方法的构造函数,是不是只有在对象类中复写equals方法这一种办法?

  还有就是 Iterator it=al.iterator(); 这语句我看着很别扭,也不理解。
  “List集合特有的迭代器,ListIterator是Iterator的子接口。”   我该怎么理解这话,在应用上,LIST迭代器和Collection迭代器有什么不同,可以讲讲Iterator和Collection之间的知识穿插结构吗?
  这两天看集合把我看晕了啊。。。。

作者: 梦女孩    时间: 2011-11-18 00:04
鉴于ArrayList没有可以指定排序方法的构造函数,是不是只有在对象类中复写equals方法这一种办法?

实现equals方法是为了在ArrayList去重,不是为了排序。
LIST迭代器和Collection迭代器有什么不同

ListIterator是在Iterator基础上实现了很多关于list的功能,比如add() set() nextIndex()和previousIndex()。这些都是操作list特有的属性的,而Collection没有这些属性,自然Iterator不会去操作它们了。
作者: 坚强    时间: 2011-11-18 21:04
梦女孩 发表于 2011-11-18 00:04
实现equals方法是为了在ArrayList去重,不是为了排序。

ListIterator是在Iterator基础上实现了很多关于li ...

哦 ,还是有很多地方不懂啊

作者: moonlight    时间: 2011-11-19 08:31
Iterator是java.util包中的一个接口,是一个叠代器,用于遍历集合中的元素。通常使用集合类对象的iterator()方法返回Iterator对象,然后利用Iterator对象访问集合对象中的元素。例如:
ArrayList<String> al = new ArrayList<String>(3);
al.add("how ");
al.add("are ");
al.add("you!");
Iterator it = al.iterator();
while(it.hasNext()){
    System.out.println(al.next());
}

换句话来说,Iterator迭代器,是按次序一个一个地获取集合中所有对象的对象。就像某人一张张地分发一副纸牌,当然这里不包括洗牌操作,此人作用相当于纸牌的迭代器。




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