黑马程序员技术交流社区

标题: java 集合小问题 [打印本页]

作者: 李志广    时间: 2012-7-11 09:00
标题: java 集合小问题
本帖最后由 007lzg 于 2012-7-11 10:51 编辑

import java.util.*;
class TestIterator
{
        public static void main(String[] args)
        {
                Collection books=new HashSet();
                books.add("轻量级J2EE");
                books.add("Struts权威指南");
                books.add("基于J2EE的Ajax宝典");
                Iterator it=books.iterator();
                while(it.hasNext())
                        {
                        String book=(String)it.next();
                        System.out.println(book);
                        if(book.equals("Struts权威指南"))
                                {
                                it.remove();
                                }
                        book="测试字符串";
                        }
                        System.out.println(books);
        }
}

对于上面的代码有两个疑问,为什么String book=(String)it.next(); 要强制转换呢?
还有book="测试字符串"; 明明对book赋值为什么最后输出的时候不显示呢?


作者: 舒赫莱宁    时间: 2012-7-11 09:15
强制类型转换是有关java中泛型的知识
由于java中向集合里存的内容不确定是什么类型的,
所以java将其默认为object类型的,当程序员将特定的类型放入
取出来用的时候,只有将其转换为变量的原来的类型
否则就无法对其进行操作。
但在jdk5.0中java提供了,泛型,很好地解决了这个问题。

你说对book赋值了,为什么没有输出
原因很简单,book的值是变了,但是你输出的是集合books
这是两个变量,它们之间值的改变并不会相互影响
作者: 淡然    时间: 2012-7-11 09:25
  1. import java.util.*;
  2. class TestIterator
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Collection books=new HashSet();
  7.                 books.add("轻量级J2EE");
  8.                 books.add("Struts权威指南");
  9.                 books.add("基于J2EE的Ajax宝典");
  10.                 Iterator it=books.iterator();
  11.                 while(it.hasNext())
  12.                         {
  13.                         String book=(String)it.next();//集合默认的元素类型是Object类,要想不用强制转换可以用泛型
  14.                         System.out.println(book);
  15.                         if(book.equals("Struts权威指南"))
  16.                                 {
  17.                                 it.remove();
  18.                                 }
  19.                         book="测试字符串";
  20.                         books.add(book);//要添加到集合中去才能输出
  21.                         }
  22.                         System.out.println(books);
  23.         }
  24. }
复制代码
泛型:
  Collection<String> books=new HashSet<String>();
  Iterator<String> it=books.iterator();

作者: 万宝东    时间: 2012-7-11 09:27
class TestIterator
{
              public static void main(String[] args)
             {
                            Collection books=new HashSet();
                            books.add("轻量级J2EE");          //首先Collection集合中的元素都是Object类型的,因为String里面没有add方法。
             books.add("Struts权威指南");       //所以用迭代器取出来的都是object类型,      
                            books.add("基于J2EE的Ajax宝典");

                            Iterator it=books.iterator();
                            while(it.hasNext())
                                    {
                                           String book=(String)it.next();     //这里需要将it.next(); (it.next(); 是object类型的)向下转型变成String类型,就必须强转加(String)
                    System.out.println(book);
                                           if(book.equals("Struts权威指南"))
                                                   {
                                                          it.remove();
                                                   }
                                           book="测试字符串";           //至于这里,是给book赋值了,但是并没有用add方法吧他添加到books集合中,所以下面打印book集合时就没有它。
                    }
                                    System.out.println(books);
       }
}

作者: 孙新强    时间: 2012-7-11 09:38
上面原因已经说得很好了 在此我就把程序加入泛型 帮你改进一下吧
import java.util.*;
class TestIterator
{
        public static void main(String[] args)
        {
                Collection<String> books=new HashSet<String>();               
                books.add("轻量级J2EE");
                books.add("Struts权威指南");
                books.add("基于J2EE的Ajax宝典");
                Iterator<String> it=books.iterator();               
                 while(it.hasNext())
                        {
                        String book=it.next();
                        System.out.println(book);
                        if(book.equals("Struts权威指南"))
                                {
                                it.remove();
                                }
                        book="测试字符串";//这个地方虽然对book进行了赋值,但是他并没有加入到集合当中,所以不会被这个程序打印出来。

                        }
                        System.out.println(books);
        }
}

扎样的话就不需要强制转换了
作者: 李志广    时间: 2012-7-11 09:59
呵呵,谢谢你们!解开了我心中的疑惑!共同进步、、、、、、{:soso_e100:}{:soso_e130:}




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