黑马程序员技术交流社区

标题: 请教问题:关于泛型的使用。 [打印本页]

作者: 李征雪    时间: 2012-4-20 09:31
标题: 请教问题:关于泛型的使用。
本帖最后由 李征雪 于 2012-4-20 09:35 编辑
  1. import java.util.*;
  2. class DemoGeneric
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al = new ArrayList();
  7.                 al.add("hello1");
  8.                 al.add("hello2");
  9.                 al.add("hello3");
  10.                 al.add("hello4");

  11.                 Iterator it = al.iterator();

  12.                 while (it.hasNext())
  13.                 {
  14.                         System.out.println(it.next());
  15.                 }
  16.         }
  17. }
复制代码
这段代码编译无警告;
  1. import java.util.*;
  2. class DemoGeneric
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet al = new TreeSet();
  7.                 al.add("hello1");
  8.                 al.add("hello2");
  9.                 al.add("hello3");
  10.                 al.add("hello4");

  11.                 Iterator it = al.iterator();

  12.                 while (it.hasNext())
  13.                 {
  14.                         System.out.println(it.next());
  15.                 }
  16.         }
  17. }
复制代码
把ArrayList换成TreeSet后则会有警告;
  1. import java.util.*;
  2. class DemoGeneric
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet<String> al = new TreeSet<String>();
  7.                 al.add("hello1");
  8.                 al.add("hello2");
  9.                 al.add("hello3");
  10.                 al.add("hello4");

  11.                 Iterator<String> it = al.iterator();

  12.                 while (it.hasNext())
  13.                 {
  14.                         System.out.println(it.next());
  15.                 }
  16.         }
  17. }
复制代码
使用TreeSet<String>和Iterator<String>编译后警告消失;
我查看了下API,在API中:
java.util.ArrayList<E>

java.util.TreeSet<E>
两个集合都是带有泛型的,为什么用ArrayList就没有警告?




作者: 黑马—王宁    时间: 2012-4-20 09:48

ArrayList还是数组,他属于弱类型集合而泛型集合属于强类型集合
作者: 张超超    时间: 2012-4-20 10:30
这其实涉及到set和list的区别:

set只有remove(Object o)方法 而list又remove(int index)和remove(Object o)两个方法,所以set只能对i进行自动装箱后和set中得元素比较符合条件后则删除,而list则执行了remove(int index)方法 是两个完全不同得方法 至于为什么执行这个方法而没有执行remove(Object o)方法是因为传的参数是int类型,java有符合条件得方法所以不会自动将其进行装箱成Object对象








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