package cooom; import org.junit.Test; import java.util.*; /** * * 泛型的使用 * 1.jdk 5.0新增的特性 * 2.在集合中使用泛型: * 总结: * a.集合接口或集合类在jdk5.0是都修改为带泛型的结构 * b.在实例化集合类是,可以指明举例的泛型类型 * c.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法,构造器属性等)使用到类的泛型的位置, * 都指定为实例化时泛型的类型 比如add(E e)----- >实例化以后add(Integer e) * d.注意点:泛型的类型必须是一个类,不能是基本数据类型,需要用到基本数据类型的时候用包装类替换 * e.如果实例化时没有指明泛型的类型,默认泛型为java.lang.Object类型 * * @author 冀帅 * @date 2020/8/13-12:06 */ public class GenericTest { //在集合中使用泛型之前的情况: @Test public void test1(){ ArrayList list = new ArrayList(); //需求:存放学生的成绩 list.add(78); list.add(76); list.add(89); list.add(88); //问题一:类型不安全(没有限制存放数据的类型) list.add("Tom"); for (Object score : list) {//取出来放到score里面 //问题二:强转时,可能出现类型转换异常(ClassCastException)。 int stuScore = (Integer) score;//Object转成Integer ,在自动拆箱 System.out.println(stuScore);//ClassCastException } } //在集合中使用泛型的情况:以ArrayList为例 @Test public void test2(){ //不能用int, 因为add()里是Object类型,int不属于。int默认值为0,Integer的默认值为NULL ArrayList<Integer> list = new ArrayList<Integer>(); list.add(78); list.add(87); list.add(99); list.add(65); // 在编译时就进行类型检查,保证数据安全 // list.add("Tom"); 编译错误 // 方式一遍历 // for (Integer score : list) { // int stuScore = score;//不用再强转了 // System.out.println(stuScore); // // } // 方式二遍历 Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } //在集合中使用泛型的情况:以HashMap为例 @Test public void test3(){ Map<String,Integer> map = new HashMap<String,Integer>(); map.put("Tom",87); map.put("Jerry",87); map.put("Jack",67); // 遍历方式一:遍历键 // Set<String> set = map.keySet(); // Iterator<String> iterator = set.iterator(); // while (iterator.hasNext()){ // System.out.println(iterator.next()); // } // 遍历方式二:遍历键和值 // Set<Map.Entry<String, Integer>> set = map.entrySet(); // Iterator<Map.Entry<String, Integer>> iterator = set.iterator(); // while (iterator.hasNext()){ // System.out.println(iterator.next()); // } // 遍历方式三:遍历键和值 Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()){ String key = iterator.next();//拿到键 Integer value = map.get(key); System.out.println(key+"---"+value); } } }