Java泛型(一)ArrayList和HashMap

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文件中将不再待用泛型信息。
 //以此使得程序运行效率不受到影响,这个过程称之为“擦除”
}

Java泛型(一)ArrayList和HashMap

时间: 2024-10-16 03:08:55

Java泛型(一)ArrayList和HashMap的相关文章

ArrayList 和 HashMap 的默认大小是多数?

ArrayList 和 HashMap 的默认大小是多数? 在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂).这就是 Java 7 中 ArrayList 和 HashMap  类 的代码片段: 1 2 3 4 5 // from ArrayList.java JDK 1.7 private static final int DEFAULT_CAPACITY = 10; //from HashMap.java JDK 7

Java泛型中的PECS原则

今天在写代码的时候使用到了这样一个方法签名: public void foo(Map<String, String> map); 在写这个参数的时候正好在想一些关于泛型的东西,于是: public void foo(Map<? extends String, ? extends String> map); 这两种写法有什么区别呢?记得以前和同学讨论过这个问题,但后来没有记下来,渐渐又淡忘了.今天又去翻了好多资料,总算找到一些可以参考的,赶紧记在这里方便以后温故知新啦.好了,言归正传

1月21日 - (转)Java 泛型

java泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样. 可以在集合框架(Collection framework)中看到泛型的动机.例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象. 因为 M

java泛型的讲解

java泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样. 可以在集合框架(Collection framework)中看到泛型的动机.例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象. 因为 M

Java泛型再学习

泛型是对于数据的一种规范,他限定了类.容器.方法可以接受的参数类型,避免参数类型混乱. 一.基本泛型 泛型最常见的地方就是集合,如: -- ArrayList<String>  表示这个集合中只能存放String类型的元素 -- HashMap<String, Object>  表示这个图中只能存放键为String类型,值为Object类型的元素 特别要注意的时,泛型只存在于编译阶段,在程序运行阶段,我们定义的泛型是并不存在的,这种方案叫“擦除”,示例: 1 public clas

java泛型擦除的神秘之处,边界处的动作,擦除的补偿

java泛型擦除的神秘之处 package org.rui.generics.erasure; public class HasF { public void f(){ System.out.println("hasf.f"); } } package org.rui.generics.erasure; /** * 边界 <T extneds Hasf>声明T必须具有类型HasF或者从Hasf导出的类型. * 如果情况确实如此,那么就可以安全地在obj上调用f()了 * T

第10篇-JAVA 集合框架-JAVA 泛型

第10篇-JAVA 集合框架-JAVA 泛型 每篇一句 :所有的不甘,都是因为还心存梦想 初学心得: 不是每件事都注定会成功,但是每件事都值得一试 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-15| JAVA 集合框架/JAVA 泛型 ] 1.JAVA 集合框架概念 通俗的说,集合就是一个存放数据的容器,准确的说,就是放数据对象引用的容器 数组和集合都是容器,有何不同? 数组长度固定,集合长度可变 数组只能存放相同类型的数据,集合可以存放不同类型的数据 数组可存放简单数据

java泛型介绍

一.泛型初衷 Java集合不会知道我们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要就具有很好的通用性.但这样做也带来两个问题: –集合对元素类型没有任何限制,这样可能引发一些问题:例如想创建一个只能保存Dog对象的集合,但程序也可以轻易地将Cat对象“丢”进去,所以可能引发异常. –由于把对象“丢进”集合时,集合丢失了对象的状态信息,集合只知道它盛装的是Object,因此取出集合元素后通常还需要进行强制类型转换.这种强制类型转换既会增加编程的复杂度.也可能引发Cl

Java泛型:类型擦除

类型擦除 代码片段一 Class c1 = new ArrayList<Integer>().getClass(); Class c2 = new ArrayList<String>().getClass(); System.out.println(c1 == c2); /* Output true */ 显然在平时使用中,ArrayList<Integer>()和new ArrayList<String>()是完全不同的类型,但是在这里,程序却的的确确会输