1. 泛型的概述和基本使用:
1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 /* 7 * ArrayList存储字符串并遍历 8 * 9 * 我们按照正常的写法来写这个程序, 结果确出错了。10 * 为什么呢?11 * 因为我们开始存储的时候,存储了String和Integer两种类型的数据。12 * 而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。13 * 但是呢,它在编译期间却没有告诉我们。14 * 所以,我就觉得这个设计的不好。15 * 回想一下,我们的数组16 * String[] strArray = new String[3];17 * strArray[0] = "hello";18 * strArray[1] = "world";19 * strArray[2] = 10;20 * 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。21 * 而这种技术被称为:泛型。22 * 23 * 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。24 * 格式:25 * <数据类型> 26 * 此处的数据类型只能是引用类型。27 * 好处:28 * A:把运行时期的问题提前到了编译期间29 * B:避免了强制类型转换30 * C:优化了程序设计,解决了黄色警告线31 */32 public class GenericDemo {33 public static void main(String[] args) {34 // 创建35 ArrayListarray = new ArrayList 数据类型>();36 37 // 添加元素38 array.add("hello");39 array.add("world");40 array.add("java");41 // array.add(new Integer(100));42 //array.add(10); // JDK5以后的自动装箱43 // 等价于:array.add(Integer.valueOf(10));44 45 // 遍历46 Iterator it = array.iterator();47 while (it.hasNext()) {48 // ClassCastException49 // String s = (String) it.next();50 String s = it.next();51 System.out.println(s);52 }53 54 // 看下面这个代码55 // String[] strArray = new String[3];56 // strArray[0] = "hello";57 // strArray[1] = "world";58 // strArray[2] = 10;59 }60 }
类 ArrayList<E>---像这种加上<E>,都是表示要明确类型
下面我们来改进以前的代码:ArrayList存储字符串并遍历泛型:
1 package cn.itcast_02; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 /* 7 * 泛型在哪些地方使用呢? 8 * 看API,如果类,接口,抽象类后面跟的有就说要使用泛型。一般来说就是在集合中使用。 9 */10 public class ArrayListDemo {11 public static void main(String[] args) {12 // 用ArrayList存储字符串元素,并遍历。用泛型改进代码13 ArrayList array = new ArrayList ();14 15 array.add("hello");16 array.add("world");17 array.add("java");18 19 Iterator it = array.iterator();20 while (it.hasNext()) {21 String s = it.next();22 System.out.println(s);23 }24 System.out.println("-----------------");25 26 for (int x = 0; x < array.size(); x++) {27 String s = array.get(x);28 System.out.println(s);29 }30 }31 }
下面我们来改进以前的代码:ArrayList存储自定义对象并遍历泛型
1 package cn.itcast_02; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 /* 7 * 需求:存储自定义对象并遍历。 8 * 9 * A:创建学生类10 * B:创建集合对象11 * C:创建元素对象12 * D:把元素添加到集合13 * E:遍历集合14 */15 public class ArrayListDemo2 {16 public static void main(String[] args) {17 // 创建集合对象18 // JDK7的新特性:泛型推断。19 // ArrayListarray = new ArrayList<>();20 // 但是我不建议这样使用。21 ArrayList array = new ArrayList ();22 23 // 创建元素对象24 Student s1 = new Student("曹操", 40); // 后知后觉25 Student s2 = new Student("蒋干", 30); // 不知不觉26 Student s3 = new Student("诸葛亮", 26);// 先知先觉27 28 // 添加元素29 array.add(s1);30 array.add(s2);31 array.add(s3);32 33 // 遍历34 Iterator it = array.iterator();35 while (it.hasNext()) {36 Student s = it.next();37 System.out.println(s.getName() + "---" + s.getAge());38 }39 System.out.println("------------------");40 41 for (int x = 0; x < array.size(); x++) {42 Student s = array.get(x);43 System.out.println(s.getName() + "---" + s.getAge());44 }45 }46 }