黑马程序员技术交流社区

标题: 集合添加---求解 [打印本页]

作者: 王飞    时间: 2012-7-14 22:16
标题: 集合添加---求解
本帖最后由 王飞 于 2012-7-15 15:06 编辑

import java.util.ArrayList;
import java.util.Iterator;


public class Test
{
        public static void main(String[] args)
        {
                //想在迭代的过程中在迭代到某一个元素后在其后面插入一个元素
  
                ArrayList array = new ArrayList();         
               
                String[] str = new String []{"zhangsan","lisi","wangwu","Itcats"};
                for(int i = 0 ;i<str.length;i++)
                {
                        array.add(str);
                }
               
                Iterator<String> it = array.iterator();  //定义迭代其
               
                while(it.hasNext())  //迭代集合里面的元素,
                {
                        if(it.next()==("zhangsan"))//如果迭代到  zhangsan 就在张三后面在添加一个元素
                        {
                                ((ArrayList) it).add("tian jia ");
                        }
                }
               
        }
}


异常的意思是这个:
当试图将对象强制转换为不是实例的子类时,抛出该异常


求解,如何添加 、 和这个异常的的具体意思
{:soso_e183:}

作者: 陆强强    时间: 2012-7-14 22:40
增和改不能用普通迭代器,只能用ListIterator;
class Test
{
        public static void main(String[] args)
        {
                ArrayList array = new ArrayList();                       
                String[] str = new String []{"zhangsan","lisi","wangwu","Itcats"};
                for(int i = 0 ;i<str.length;i++)
                {
                        array.add(str[i]);
                }
               
                ListIterator<String> it = array.listIterator();  
               
                while(it.hasNext())  
                {
                        String s=it.next();
                if(s=="zhangsan")
                        {
                               it.add("tian jia ");
                        }
                }
               
        System.out.println(array);//帮你打印出来看看效果
               
        }
}
作者: 陆强强    时间: 2012-7-14 22:41
本帖最后由 陆强强 于 2012-7-14 22:43 编辑

卡了一下多发了一次{:soso_e112:}

作者: 王冰    时间: 2012-7-14 22:45
               if(it.next()==("zhangsan")) //这里的it.next()在你的程序中得到的是Object类型的对象,不能用 == 判断与一个字符串是否相同,要用equals判断
            ((ArrayList) it).add("tian jia "); //这里出现的是类型转换异常,也就是不可以把Iterator类型转换为ArrayList类型,
             在用Iterator进行迭代时,只能用迭代器的方法操作元素,而Iterator的方法是有限的,只能进行判断,删除,取出的操作,
如果要进行其他的操作,那么就要用到Iterator的子接口ListIterator,该接口只能通过List集合的listIterator方法进行获取,

Iterator<String> it = array.iterator();  
while(it.hasNext())  
{
           if(it.next()==("zhangsan"))
           {
                    ((ArrayList) it).add("tian jia ");
            }
}
将以上代码改成如下的形式即可以在集合中添加元素
ListIterator<String> it = array.listIterator();  
while(it.hasNext())  //迭代集合里面的元素,
{
                Object s = it.next();
                 if(s.equals("zhangsan"))//如果迭代到  zhangsan 就在张三后面在添加一个元素
                 {
                          it.add("tian jia ");
                }
                System.out.println(s);//这里打印的是原集合中的元素
}
System.out.println(array);//这里打印出来的array就会在zhangsan后面出现tian jia这个字符串了,即改变后集合中的元素


作者: 黑马刘涛    时间: 2012-7-14 22:54
  1. import java.util.*;


  2. public class Test1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //想在迭代的过程中在迭代到某一个元素后在其后面插入一个元素
  7.   
  8.                 ArrayList array = new ArrayList();         
  9.                
  10.                 String[] str = new String []{"zhangsan","lisi","wangwu","Itcats"};
  11.                 for(int i = 0 ;i<str.length;i++)
  12.                 {
  13.                         array.add(str[i]);
  14.                 }
  15.                
  16.                 ListIterator<String> it = array.listIterator();  //Iterator迭代器没有add操作
  17.                
  18.                 while(it.hasNext())  //迭代集合里面的元素,
  19.                 {
  20.                         if(it.next()==("zhangsan"))//如果迭代到  zhangsan 就在张三后面在添加一个元素
  21.                         {
  22.                                 it.add("tian jia ");
  23.                         }
  24.                 }
  25.                                 System.out.println(array);
  26.                
  27.         }
  28. }
复制代码
void add(E e)将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有)
“异常的意思是这个:
当试图将对象强制转换为不是实例的子类时,抛出该异常


求解,如何添加 、 和这个异常的的具体意思” 正如毕老师说,不能讲人强制转换为狗,具体来说,这个迭代器类和ArrayList类都是Object类的子类,而子类之间是不能强制转换,转换时向下转换。父类向子类转换。我在上面帖的代码解决了你的问题。
作者: 黄昆    时间: 2012-7-14 23:50
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;


public class Test
{
        public static void main(String[] args)
        {
                //想在迭代的过程中在迭代到某一个元素后在其后面插入一个元素
  
                ArrayList array = new ArrayList();         
               
               String[] str = new String []{"zhangsan","lisi","wangwu","Itcats"};
                for(int i = 0 ;i<str.length;i++)
                {
                        array.add(str);
                }
                /*在定义迭代器之前,要首先考虑要不要再迭代的过程中对数据进行操作。如果在迭代的过程中要进行增 删 改 查,就要定义ListIterator
                       因为在迭代时不可以通过集合对象的方法操作集合中的元素因为会发生ConcurrentModificationException异常(并发修改异常)。
                       所以在迭代时只能用迭代器的方法来操纵元素,可是Iterator中的方法是有限的,只能对元素进行判断,取出,删除的操作,
                       如果想要其他的操作就需要使用其子接口ListIterator。而该接口只能通过List集合中的listIterator方法获取.
                 */
               ListIterator<String> listIterator = array.listIterator();  //定义一个ListIterator迭代器,
               //在这里使用了泛型,因此也就避免了强制转换的麻烦;也可以将程序运行时出现的ClassCastException异常转移到编译时期,更方便解决问题。
               
               while(listIterator.hasNext())  //迭代集合里面的元素,
                {
                        if(listIterator.next()==("zhangsan"))//如果迭代到  zhangsan 就在张三后面在添加一个元素
                       {
                                listIterator.add("tian jia ");
                        }
                }
               
               System.out.println(array);
       }
}
作者: 王飞    时间: 2012-7-15 14:55
{:soso_e121:}帅哥们 谢了




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