黑马程序员技术交流社区

标题: java中Map<?,?>是什么意思,最重要的是怎么能用上 [打印本页]

作者: 荣天    时间: 2012-5-13 11:13
标题: java中Map<?,?>是什么意思,最重要的是怎么能用上
java中Map<?,?>是什么意思,最重要的是怎么能用上   谢谢
作者: 荣天    时间: 2012-5-13 11:14
自己先定下
作者: 刘克方    时间: 2012-5-13 11:25
指的是泛型,map 值都Object类型,取出里面的对象需要进行类型转换;使用了泛型就不用转换了,存的什么类型,取出仍是什么类型;
如:
Map<String,Student> map=HashMap<String,Student>();
Student t=new Studnent("zhangsan",23);
map.put("zhangsan", t);
现在把zhangsan取出来
Student stdent=map.get("zhangsan");//不需要类型转换
如果没有使用泛型,则代码应该如下:
Student stdent=(Student) map.get("zhangsan");//必须进行类型转换
作者: 郭振    时间: 2012-5-13 11:36
Map<?,?>:
先解释map<k,v>
1.<>示范型的符号,表示里边存储的类型。
2.map该集合存储的是键和值也就是k和v,k是映射所维护键值的类型,v映射值的类型。

<?,?>:示范型里边的叫做问号通配符,?表示的里边存储的数据的类型不知道,这样能提高代码的实用型。

作者: It's_Zero    时间: 2012-5-13 11:48
  1. public class MapDemo1 {
  2.         public static void main(String [] args){
  3.                 Map<String, Integer> map = new HashMap<String, Integer>();//Map<对象,对象>
  4.                 map.put("A", 1);
  5.                 map.put("B", 2);
  6.                 System.out.println(map.get("B"));//输出2
  7.                 System.out.println(map.keySet());//输出索引值[A,B]
  8.                 map.remove("A");//删除A
  9.                 System.out.println(map.keySet());//输出索引值[B]
  10.                 System.out.println(map.size());//map的长度  和list一样
  11.                 map.clear();//删除所有
  12.                 System.out.println(map.keySet());//输出索引值[]  空索引
  13.                 Map<String,Object> map2= new TreeMap<String, Object>();//Map<对象,对象>
  14.                 Map<Object, Object> map3 =new HashMap<Object, Object>();//Map<对象,对象>
  15.         }
  16. }
复制代码

作者: 逄焕玮    时间: 2012-5-13 11:51
<>中定义的是泛型,泛型是JDK1.5版本后出现的新特性,是一个类型安全机制

泛型的作用在于将运行时期可能会出现的问题ClassCastException(类型转换异常),转移到了编译时期,由编译器进行检查,从而方便于程序员解决问题,让运行时期的问题减少

通常在集合框架中是最常见的,其实<>就是用来接收引用数据类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可,可以无需进行强制类型转换,举个毕老师讲过的很简单的例子
  1. ArrayList<String> al = new ArrayList<String>();
  2. Iterator<String> it = al.iterator();
  3. while(it.hasNext())
  4. {
  5. String s = it.next();
  6.   //不用强制转换了
  7.   //如果没加泛型的话,需要写成String s = (String)it.next();
  8.   //......其他代码
  9. }
  10. //避免了强制转换的麻烦
复制代码
泛型只在编译时期有用,到运行时期,就会去泛型的
泛型的具体应用还有泛型类,泛型方法,泛型接口,具体请先看一下毕老师基础视频第15天的内容,碰到问题咱再具体研究,加油{:soso_e130:}
作者: 崔陈喜    时间: 2012-5-13 13:13
可以自己先查文档。增强自己独立解决问题的能力
1.<>示范型的符号,表示里边存储的类型。
2.map该集合存储的是键和值也就是k和v,k是映射所维护键值的类型,v映射值的类型。

<?,?>:示范型里边的叫做问号通配符,?表示的里边存储的数据的类型不知道,这样能提高代码的实用型
作者: 荣天    时间: 2012-5-13 15:30
刘克方 发表于 2012-5-13 11:25
指的是泛型,map 值都Object类型,取出里面的对象需要进行类型转换;使用了泛型就不用转换了,存的什么类型 ...

谢谢:):)
作者: 荣天    时间: 2012-5-13 15:54
逄焕玮 发表于 2012-5-13 11:51
中定义的是泛型,泛型是JDK1.5版本后出现的新特性,是一个类型安全机制

泛型的作用在于将运行时期可能会出 ...

谢谢了  
作者: 郭永岳    时间: 2012-5-13 16:07
这个是JDK 1.5以后出现的新特性的写法
Map<key1, value1> map = null;
表示的是这个map的key必须是key1类型,value必须是value1类型。

譬如你声明一个Map<String, List> map = null;
如果你要放入map.put("abc", Integer),就不可以了。

而拿取得时候,这样声明,不用强制转换。譬如
List list = map.get("abc");
作者: 刘克方    时间: 2012-5-13 20:12
荣天 发表于 2012-5-13 15:30
谢谢

哥们有收获的话,给评下分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2