黑马程序员技术交流社区
标题: 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
- 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();//集合默认的元素类型是Object类,要想不用强制转换可以用泛型
- System.out.println(book);
- if(book.equals("Struts权威指南"))
- {
- it.remove();
- }
- book="测试字符串";
- books.add(book);//要添加到集合中去才能输出
- }
- System.out.println(books);
- }
- }
复制代码 泛型:
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 |