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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘圣伟 中级黑马   /  2012-8-15 11:46  /  1920 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] args) {
  2.         ArrayList a1 = new ArrayList();
  3.         a1.add("java01");
  4.         a1.add("java02");
  5.         a1.add("java03");
  6.         a1.add(1,"java0081");
  7.         /*Iterator it = a1.iterator();
  8.         while(it.hasNext()){
  9.             p(it.next());
  10.         }    */
  11.         ListIterator li = a1.listIterator();
  12.         while(li.hasNext()){
  13.             Object obj = li.next();
  14.             if(obj.equals("java02"))
  15.                 //在后边添加一个元素。
  16.                 li.add("java008");
  17.                 //修改元素;
  18.                 //li.set("java077");
  19. }
复制代码
为什么 a1.add(1,"java0081") 添加在java02的前面,
li。add添加在java02 的后边呢

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1 鼓励一下

查看全部评分

4 个回复

倒序浏览
那是因为al.add(1,"java0081")是在下标为1的位置添加java0081,故java002和后面的元素都向后挪一位;
而add方法是在查询到的元素的后面添加
回复 使用道具 举报
a1.add(1,"java0081")是在集合的第二个位置插入java0081.所以插在java02的前面。
只有元素等于java02时,才往li里添加java008,所以在java02后面
回复 使用道具 举报
import java.util.ArrayList;
import java.util.ListIterator;
public class TestList {
public static void main(String[] args) {
  ArrayList a1 = new ArrayList();
  a1.add("java01");
  a1.add("java02");
  a1.add("java03");
//为什么 a1.add(1,"java0081") 添加在java02的前面?因为你在这里面设定了“java0081”所存放的位置,角标为1
  //API中是这么定义的void add(int index, E element) 将指定的元素插入此列表中的指定位置。
  a1.add(1, "java0081");
  ListIterator li = a1.listIterator();
  while (li.hasNext()) {
   Object obj = li.next();
   if (obj.equals("java02"))
    // 在后边添加一个元素。
    //add添加在java02 的后边呢 ?
    //在ListIterator的add方法中是这么定义的:void add(E e)将指定的元素插入列表(可选操作)。
    //该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);
    //如果列表没有元素,那么新元素就成为列表中的唯一元素。
    //这个时候光标指向“java02”的后面,自然添加在”java02“的后面

    li.add("java008");
  }
  //Iterator it = a1.iterator();
  java.util.Iterator it = a1.iterator();
  while(it.hasNext()){
   System.out.println(it.next());
   }
}
}

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
板凳兄:
        为什么 a1.add(1,"java0081") 添加在java02的前面?因为你在这里面设定了“java0081”所存放的位置,角标为1
        API中是这么定义的void add(int index, E element) 将指定的元素插入此列表中的指定位置。
        在后边添加一个元素。
        add添加在java02 的后边呢 ?
        在ListIterator的add方法中是这么定义的:void add(E e)将指定的元素插入列表(可选操作)。
        该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);
        如果列表没有元素,那么新元素就成为列表中的唯一元素。


板凳兄说的已经恨透彻了,我想再说一点,迭代器之所以这样设计是因为在迭代的过程中如果有新元素,我们也可以加入
并且在接下来的迭代过程中,我们还可以对其进行打印。就如人家说的那样:在ListIterator的add方法中是这么定义的:void add(E e)将指定的元素插入列表(可选操作)。
该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马