黑马程序员技术交流社区

标题: 小问题一个 [打印本页]

作者: 尹善波    时间: 2012-7-10 14:24
标题: 小问题一个
本帖最后由 菠菜(yinshi) 于 2012-7-12 23:29 编辑

import java.util.*;
class Person
{
private String name;
Person(String name)
{
  this.name = name;
}
public String getName()
{
  return name;
}
public String toString()
{
  return "person :"+name;
}
}
class Student extends Person
{
Student(String name)
{
  super(name);
}
}
class  GenericTest
{
public static void main(String[] args)
{
  ArrayList<;Person> al = new ArrayList<;Person>();
  al.add(new Person("ahah01"));
  al.add(new Person("ahah02"));
  al.add(new Person("ahah03"));
  ArrayList<Student> al1 = new ArrayList<Student>();
  al1.add(new Student("haha001"));
  al1.add(new Student("haha002"));
  al1.add(new Student("haha003"));
  al.addAll(al1);
  Iterator<;Person> it = al.iterator();
  while(it.hasNext())
  {
   System.out.println(it.next().getName()+"...."+it.next().toString());
//这里的结果是:
ahah01....person :ahah02
ahah03....person :haha001
haha002....person :haha003,好像是al1中的元素都按顺序排在了al后面,这是怎么回事?
                                                若果要打印:ahah01....person :ahah01 该怎么写
}
}


作者: 李伟    时间: 2012-7-10 14:41
while(it.hasNext())
  {
      //问题出在了下面粗体部分,it.next()又指向了下一个元素,所以应该改成:
  Person p=it.next();
   System.out.println(p.getName()+"...."+p.toString());
  
// System.out.println(it.next().getName()+"...."+it.next().toString());

//这里的结果是:
ahah01....person :ahah02
ahah03....person :haha001
haha002....person :haha003,好像是al1中的元素都按顺序排在了al后面,这是怎么回事?
                                                若果要打印:ahah01....person :ahah01 该怎么写
}

作者: 汤密奕    时间: 2012-7-10 22:55
注意这句al.addAll(all),执行完后打印al应该是[person :ahah01, person :ahah02, person :ahah03, person :haha001, person :haha002, person :haha003],所以迭代器依次输出了那个结果,是正确的

如果要打印成你说的结果,就如二楼所说,在while循环体里加上Person p = it.next();System.out.println(p.getName()+"...."+p.toString());这两句
作者: 张天天    时间: 2012-7-11 05:54
为什么数据在al中是连续存储的,这与内存分配有关
ArrayList是用数组实现在,数组在内存中是一段连续的内存地址
向数组中添加数据是依次添加的,指针向下移动一位,添加一个数据
因此数据的存储是有序的,如楼上所说:al中的数据是
[person :ahah01, person :ahah02, person :ahah03, person :haha001, person :haha002, person :haha003]

输出内容不连续是由于你在一次循环里用了两次next()方法,每调用一次next方法指针就会向前移动一位
因此输出数据是不完整的(在这里由于讨论到了数组,就不得不提指针,实属无奈,望见谅)




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