A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹善波 中级黑马   /  2012-7-10 14:24  /  1332 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 菠菜(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 该怎么写
}
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

3 个回复

倒序浏览
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 23:47
回复 使用道具 举报
注意这句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());这两句
回复 使用道具 举报
为什么数据在al中是连续存储的,这与内存分配有关
ArrayList是用数组实现在,数组在内存中是一段连续的内存地址
向数组中添加数据是依次添加的,指针向下移动一位,添加一个数据
因此数据的存储是有序的,如楼上所说:al中的数据是
[person :ahah01, person :ahah02, person :ahah03, person :haha001, person :haha002, person :haha003]

输出内容不连续是由于你在一次循环里用了两次next()方法,每调用一次next方法指针就会向前移动一位
因此输出数据是不完整的(在这里由于讨论到了数组,就不得不提指针,实属无奈,望见谅)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马