package Plan.GenericDemo; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; public class Demo1 { public static void main(String[] args) { // ArrayList<E> // <>称之为typeof // E称之为类型参数变量 // ArrayList<Integer>中的Integer称之为实际类型参数 // ArrayList<E>称之为泛型类型。犹如Map<K,V> // ArrayList<Integer>称之为参数化的类型(ParameterizedType) { System.out.println("runing"); List list = new ArrayList(); list.add("item1 String"); list.add(1); list.add(1.2); list.add(new Integer(1)); Iterator iter = list.iterator(); while (iter.hasNext()) { Object item = iter.next(); if(item.getClass()==int.class) { System.out.println("--look out! int " + item); } else if(item.getClass()==Integer.class) { System.out.println("--look out! Integer " + item); } else { System.out.println(item.getClass().toString()); } System.out.println("That is " + item); } } { List<String> listStr = new ArrayList<String>(); listStr.add("I am ..."); Iterator<String> iter = listStr.iterator(); while (iter.hasNext()) { String str = iter.next(); System.out.println("This is " + str); } for(String str:listStr) { System.out.println(str+" !!!!!!!!!!!!!!"); } System.out.println("exit"); } { } } @Test public void Test1() { Map map=new HashMap(); map.put("k1", 0); map.put("k2", 1); map.put(1.2, 2); map.put("k4", "sdfsdf"); map.put("k5", 4); map.put("k6", 5); } @Test public void Test2() { //注意使用泛型时,泛型类型必须是引用数据类型,不能使基本数据类型 Map<String,Integer> map=new HashMap<String,Integer>(); //可以不用Integer(0),直接用0.因为jdk5支持装箱 map.put("k1", 0); map.put("k2", 1); map.put("k3", 2); map.put("k4", 3); map.put("k5", 4); map.put("k6", 5); map.put("k7", null); { System.out.println("Keyset:"); Set<String>set=map.keySet(); Iterator<String> iter = set.iterator(); while(iter.hasNext()) { String str=iter.next(); System.out.println(str); } } { System.out.println("\r\nentrySet:"); map.entrySet(); Set<Map.Entry<String,Integer>>set=map.entrySet(); System.out.println("\r\n迭代器遍历:"); Iterator<Map.Entry<String,Integer>> iter = set.iterator(); while(iter.hasNext()) { Map.Entry<String,Integer> entry=iter.next(); System.out.println(entry.getKey()+" = "+entry.getValue()); } System.out.println("\r\n增强for循环:(注意:HashMap没有实现Iterable借口,所以不能使用;而需要用entrySet得到set)"); for(Map.Entry<String,Integer> entryItem:set) { //jdk5支持装箱支持拆箱 System.out.println(entryItem.getKey()+" : "+entryItem.getValue()); } } } @Test public void Test3() { //Type mismatch: cannot convert from ArrayList<String> to ArrayList<Object> //ArrayList<Object> arraylistObjectRef=new ArrayList<String>(); //Type mismatch: cannot convert from ArrayList<Object> to ArrayList<String> //ArrayList<String> arraylistStringRef=new ArrayList<Object>(); // 在使用泛型的时候,如果两边都使用了泛型类型,那么必须完全一样。 // 但是, 如果一边没有使用泛型类型,无论哪边使用那哪边没有都是可以的。 ArrayList arraylistRef=new ArrayList<String>(); ArrayList<String> arraylistStringRef=new ArrayList(); } //泛型时提供给javac便一起使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。 //但编译器编译带有泛型的java程序之后,生成的class文件中将不再待用泛型信息。 //以此使得程序运行效率不受到影响,这个过程称之为“擦除” }