JAVA基础篇----泛型在集合的应用


  • 泛型(JDK5.0新增的特性)的定义:
  • //集合中未使用泛型时:
  • //对于ArrayList:
  • ArrayList arr= new ArrayList();
  • //假设你要存放一组学生的成绩:
  • arr.add(99);
  • arr.add(100);
  • arr.add(93);
  • arr.add(92);
  • arr.add("95");//这就是问题所在,即对存储的数据控制不够严格,容易把其他类型的数据混入
  • for(Object o : arr){
  • //并且对存入的数据进行强制转换会报ClassCastException异常
  • int i = (int)o;
  • System.out.println(o);
  • }
  • //在集合中使用泛型:
  • //尖括号<>里面放的是基本类型所对应的包装类
  • ArrayList arr= new ArrayList();
  • //假设你要存放一组学生的成绩:
  • arr.add(99);
  • arr.add(100);
  • arr.add(93);
  • arr.add(92);
  • //arr.add("95");使用了泛型后,对实参就有了限制,保证数据的安全,如果不符合类型的数据就会编译时报错
  • for(Integer o : arr){
  • int i = o;//可以不用再去强制转换,直接就可以自动拆箱即可
  • System.out.println(o);
  • }
  • Iterator it = arr.iterator();//或者是Iterator it = arr.iterator();对于迭代器的遍历方式有无泛型两个都可以
  • while(it.hasNext()){
  • System.out.println(it.next());
  • }
  • //对于HashMap:
  • //未应用泛型时
  • HashMap HM = new HashMap();
  • //应用泛型p时:
  • HashMap hm = new HashMap();
  • //JDK7以后可以把new后面<>中的类型省略即HashMap hm = new HashMap<>();
  • hm.put(1001,"张三");
  • hm.put(1002,"李四");
  • hm.put(1003,"王五");
  • Set> set = hm.entrySet();
  • Iterator> it = set.iterator();
  • while(it.hasNext()){
  • Map.Entry me = it.next();
  • Integer k = me.getKey();
  • String v = me.getValue();
  • System.out.println(k + "->" + v);
  • }