1、JDK5.0新增的特性
2、在集合中使用泛型
总结:
① 集合接口 或 集合类在JDK5.0时都修改为带泛型的结构
② 在实例化集合类时,可以指明具体的泛型类型
③ 指明完以后,在集合类 或 接口中,凡是定义类 或 接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。比如:add(E e) --> 实例化以后:add(Integer e)
④ 注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,拿其对应的包装类替换
public class GenericTest {
/**
* 在集合中不使用泛型可能出现的问题
*/
@Test
public void test01(){
List list = new ArrayList<>();
list.add(1);
list.add(2);
//问题一:类型不安全
list.add("好的");
for (Object obj : list) {
//问题二:强转时,出现ClassCastException
Integer num = (Integer) obj;
System.out.println(num);
}
}
/**
* 在集合中使用泛型,以ArrayList为例
*/
@Test
public void test02() {
//泛型的数据类型不能是基本数据类型,所以下面的注释掉的是错误的
// List<int> list = new ArrayList<>();
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
//泛型自带类型检查,编译时,就会进行类型检查,保证数据的安全
// list.add("好的");
for (Integer obj : list) {
//泛型避免了强转操作
Integer num = obj;
System.out.println(num);
}
}
/**
* 在集合中使用泛型,以HashMap为例
*/
@Test
public void test03() {
Map<String, Integer> map = new HashMap<>();
map.put("TOM", 1);
map.put("JACK", 2);
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> next = iterator.next();
String key = next.getKey();
Integer value = next.getValue();
System.out.println(key);
System.out.println(value);
}
}
}