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
// <>称之为typeof
// E称之为类型参数变量
// ArrayList中的Integer称之为实际类型参数
// ArrayList称之为泛型类型。犹如Map
// ArrayList称之为参数化的类型(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 listStr = new ArrayList();
listStr.add("I am ...");
Iterator 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 map=new HashMap();
//可以不用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:");
Setset=map.keySet();
Iterator iter = set.iterator();
while(iter.hasNext())
{
String str=iter.next();
System.out.println(str);
}
}
{
System.out.println("\r\nentrySet:");
map.entrySet();
Set>set=map.entrySet();
System.out.println("\r\n迭代器遍历:");
Iterator> iter = set.iterator();
while(iter.hasNext())
{
Map.Entry entry=iter.next();
System.out.println(entry.getKey()+" = "+entry.getValue());
}
System.out.println("\r\n增强for循环:(注意:HashMap没有实现Iterable借口,所以不能使用;而需要用entrySet得到set)");
for(Map.Entry entryItem:set)
{
//jdk5支持装箱支持拆箱
System.out.println(entryItem.getKey()+" : "+entryItem.getValue());
}
}
}
@Test
public void Test3()
{
//Type mismatch: cannot convert from ArrayList to ArrayList
//ArrayList arraylistObjectRef=new ArrayList();
//Type mismatch: cannot convert from ArrayList to ArrayList
//ArrayList arraylistStringRef=new ArrayList();
// 在使用泛型的时候,如果两边都使用了泛型类型,那么必须完全一样。
// 但是, 如果一边没有使用泛型类型,无论哪边使用那哪边没有都是可以的。
ArrayList arraylistRef=new ArrayList();
ArrayList arraylistStringRef=new ArrayList();
}
//泛型时提供给javac便一起使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。
//但编译器编译带有泛型的java程序之后,生成的class文件中将不再待用泛型信息。
//以此使得程序运行效率不受到影响,这个过程称之为“擦除”
}