黑马程序员技术交流社区

标题: list 问题 [打印本页]

作者: 刘圣伟    时间: 2012-8-15 11:46
标题: list 问题
  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 的后边呢


作者: 王冰    时间: 2012-8-15 11:55
那是因为al.add(1,"java0081")是在下标为1的位置添加java0081,故java002和后面的元素都向后挪一位;
而add方法是在查询到的元素的后面添加
作者: 李菁    时间: 2012-8-15 11:58
a1.add(1,"java0081")是在集合的第二个位置插入java0081.所以插在java02的前面。
只有元素等于java02时,才往li里添加java008,所以在java02后面
作者: 张忠豹    时间: 2012-8-15 12:16
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());
   }
}
}


作者: 杨健yj    时间: 2012-8-15 12:48
板凳兄:
        为什么 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 返回的下一个元素之后(如果有)





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