map用法的一点小小总结
2009-09-24 14:17
399 查看
map的用法,发现这种东西还是要研究套路,套路熟了再去研究它的所以然,硬生生的对着书看,确实有点浪费时间,
一,首先是导入各种包,
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
二,接着构建一个属于map类hashmap的对象,括号内为对应的key和value类型,
Map<String,Integer> map=new HashMap<String,Integer>();
三,接着是放入对象,
map.put(“age”,10); map.put(“age2”,13);
检验结果可以直接打印,System.out.println(map);
逐个打印的話,先构建一个集合为key的set,然后遍历即可,其中map.get(key)=value
Set<String> set = map.keySet();
for(String key : set)
System.out.println(key+"="+map.get(key));
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class TestMap {
public static void main(String[] args) throws Exception {
Map<String,Object> map=new HashMap<String,Object>();
map.put("age", 18);map.put("name", "Robin");
map.put("id", "008");map.put("height", "1.70");
map.put("scores", "87");map.put("grade", "normal");
map.put("gender", "male");
System.out.println(map);
Set<String> set=map.keySet();
for(String key:set)
System.out.println(key+"="+map.get(key));
}
}
奇怪,刚才我打学生类的就不行,改成object就ok了,好像是我构建的object对象具有如下属性,
有了这些准备知识,现在再来研究反射,昨天那个一点都不懂的题目,
看了不少代码,反射给我的感觉就是完全copy一个class文件,然后调用它的构造,方法,属性等,因为是完全copy的一个副本,所以可以进行操作,设定值什么的,感觉很麻烦,费劲周折一堆公式话的java语句,首先构造出一个目标模板,然后在main方法里导入目标class文件名字之类的,这样复制完成,输入数据就可以得到结果,完全副本一样的效果,但是我不明白这样做的好处,为什么不直接调用目标类的方法,构造,属性呢?因为在某些条件下这些东西不能很容易获得,好吧,这不是我现在要研究的问题,研究反射的套路是首要,
Class c=Class.forName(name); //packagename+classname,it’s the 1st step to get the target’s object.
Object obj=c.newInstance(); //create the object which is the copy of the target
然后所有操作就是在新建副本obj上进行;
不大明白为什么map中的key指代具体对象中的field,因果倒置?因为后面map中首先键入的是field值,所以?这是个问题,先skip[Jes1]
String mName="set"+key.substring(0, 1).toUpperCase()+key.substring(1);
方法名的取得,其实沒什么好说的,主要是String方法的应用;
Field f=c.getDeclaredField(key);
Method m=c.getMethod(mName,f.getType());
m.invoke(obj, map.get(key));
Method m=c.getMethod("setName", String.class);
m.invoke(obj, "zhang");
System.out.println(obj);
加一条对比下,getMethod
public static Object getInstance (String name,Map<String,Object> map) throws Exception {
套路记住,
Object obj=getInstance("date0923.Student", map);
System.out.println(obj);
因为前面其实有static那个testfill大可不要,调用本类建立的副本框架,输入具体值,就生成具体类的副本,模板就出来了,
打印,沒什么好说的,
下面是3个重写的介绍,
@Override
public boolean equals(Object obj) {
if(obj==null) return false;
else if(obj.getClass()==this.getClass()) {
Student s=(Student)obj;
return s.id==this.id;
}
return false;
}
@Override
public int hashCode() {
int type=this.getClass().hashCode();
return type*41+id;
}
@Override
public String toString() {
return name+","+id+","+age;
}
自己做的练习,有点累,嘿嘿
package ComprehensiveExercises;
public class Rectangle {
private int a;
private int b;
public Rectangle() {
super();
System.out.println("Rectangle one");
}
public Rectangle(int a,int b) {
super();
this.setA(a);
this.setB(b);
System.out.println("Rectangle two");
}
public int getA() {
return a;
}
public void setA(int a) {
if(a>0)this.a = a;
else
System.err.println("invalid A's length");
}
public int getB() {
return b;
}
public void setB(int b) {
if(b>0)this.b = b;
else
System.err.println("invalid B's length");
}
@Override
public boolean equals(Object obj) {
if(obj==null) return false;
else if (obj.getClass()==this.getClass()) {
Rectangle r=(Rectangle)obj;
return r.a==this.a;
}
return false;
}
@Override
public int hashCode() {
int type=this.getClass().hashCode();
return type*41+a;
}
@Override
public String toString() {
return "A's length="+a+"; B's length="+b+" ;and the area is="+getArea(a,b);
}
public static int getArea(int a,int b) {
int area=a*b;
return area;
}
}
package ComprehensiveExercises;
import java.lang.reflect.*;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class TestR {
public static Object getInstance(String name,Map<String,Object> map) throws Exception{
Class c=Class.forName(name);
Object obj=c.newInstance();
Set<String> set=map.keySet();
for(String key:set) {
String mName="set"+key.substring(0,1).toUpperCase()+key.substring(1);
Field f=c.getDeclaredField(key);
Method m=c.getMethod(mName, f.getType());
m.invoke(obj, map.get(key));
}
return obj;
}
public static void main(String[] args) throws Exception {
Map<String,Object> map=new HashMap<String,Object>();
map.put("a",6);map.put("b", 15);
Object obj=getInstance("ComprehensiveExercises.Rectangle",map);
System.out.println(obj);
}
}
[Jes1]暂时還不明白为什么。。。
一,首先是导入各种包,
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
二,接着构建一个属于map类hashmap的对象,括号内为对应的key和value类型,
Map<String,Integer> map=new HashMap<String,Integer>();
三,接着是放入对象,
map.put(“age”,10); map.put(“age2”,13);
检验结果可以直接打印,System.out.println(map);
逐个打印的話,先构建一个集合为key的set,然后遍历即可,其中map.get(key)=value
Set<String> set = map.keySet();
for(String key : set)
System.out.println(key+"="+map.get(key));
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class TestMap {
public static void main(String[] args) throws Exception {
Map<String,Object> map=new HashMap<String,Object>();
map.put("age", 18);map.put("name", "Robin");
map.put("id", "008");map.put("height", "1.70");
map.put("scores", "87");map.put("grade", "normal");
map.put("gender", "male");
System.out.println(map);
Set<String> set=map.keySet();
for(String key:set)
System.out.println(key+"="+map.get(key));
}
}
奇怪,刚才我打学生类的就不行,改成object就ok了,好像是我构建的object对象具有如下属性,
有了这些准备知识,现在再来研究反射,昨天那个一点都不懂的题目,
看了不少代码,反射给我的感觉就是完全copy一个class文件,然后调用它的构造,方法,属性等,因为是完全copy的一个副本,所以可以进行操作,设定值什么的,感觉很麻烦,费劲周折一堆公式话的java语句,首先构造出一个目标模板,然后在main方法里导入目标class文件名字之类的,这样复制完成,输入数据就可以得到结果,完全副本一样的效果,但是我不明白这样做的好处,为什么不直接调用目标类的方法,构造,属性呢?因为在某些条件下这些东西不能很容易获得,好吧,这不是我现在要研究的问题,研究反射的套路是首要,
Class c=Class.forName(name); //packagename+classname,it’s the 1st step to get the target’s object.
Object obj=c.newInstance(); //create the object which is the copy of the target
然后所有操作就是在新建副本obj上进行;
不大明白为什么map中的key指代具体对象中的field,因果倒置?因为后面map中首先键入的是field值,所以?这是个问题,先skip[Jes1]
String mName="set"+key.substring(0, 1).toUpperCase()+key.substring(1);
方法名的取得,其实沒什么好说的,主要是String方法的应用;
Field f=c.getDeclaredField(key);
Method m=c.getMethod(mName,f.getType());
m.invoke(obj, map.get(key));
Method m=c.getMethod("setName", String.class);
m.invoke(obj, "zhang");
System.out.println(obj);
加一条对比下,getMethod
public static Object getInstance (String name,Map<String,Object> map) throws Exception {
套路记住,
Object obj=getInstance("date0923.Student", map);
System.out.println(obj);
因为前面其实有static那个testfill大可不要,调用本类建立的副本框架,输入具体值,就生成具体类的副本,模板就出来了,
打印,沒什么好说的,
下面是3个重写的介绍,
@Override
public boolean equals(Object obj) {
if(obj==null) return false;
else if(obj.getClass()==this.getClass()) {
Student s=(Student)obj;
return s.id==this.id;
}
return false;
}
@Override
public int hashCode() {
int type=this.getClass().hashCode();
return type*41+id;
}
@Override
public String toString() {
return name+","+id+","+age;
}
自己做的练习,有点累,嘿嘿
package ComprehensiveExercises;
public class Rectangle {
private int a;
private int b;
public Rectangle() {
super();
System.out.println("Rectangle one");
}
public Rectangle(int a,int b) {
super();
this.setA(a);
this.setB(b);
System.out.println("Rectangle two");
}
public int getA() {
return a;
}
public void setA(int a) {
if(a>0)this.a = a;
else
System.err.println("invalid A's length");
}
public int getB() {
return b;
}
public void setB(int b) {
if(b>0)this.b = b;
else
System.err.println("invalid B's length");
}
@Override
public boolean equals(Object obj) {
if(obj==null) return false;
else if (obj.getClass()==this.getClass()) {
Rectangle r=(Rectangle)obj;
return r.a==this.a;
}
return false;
}
@Override
public int hashCode() {
int type=this.getClass().hashCode();
return type*41+a;
}
@Override
public String toString() {
return "A's length="+a+"; B's length="+b+" ;and the area is="+getArea(a,b);
}
public static int getArea(int a,int b) {
int area=a*b;
return area;
}
}
package ComprehensiveExercises;
import java.lang.reflect.*;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
public class TestR {
public static Object getInstance(String name,Map<String,Object> map) throws Exception{
Class c=Class.forName(name);
Object obj=c.newInstance();
Set<String> set=map.keySet();
for(String key:set) {
String mName="set"+key.substring(0,1).toUpperCase()+key.substring(1);
Field f=c.getDeclaredField(key);
Method m=c.getMethod(mName, f.getType());
m.invoke(obj, map.get(key));
}
return obj;
}
public static void main(String[] args) throws Exception {
Map<String,Object> map=new HashMap<String,Object>();
map.put("a",6);map.put("b", 15);
Object obj=getInstance("ComprehensiveExercises.Rectangle",map);
System.out.println(obj);
}
}
[Jes1]暂时還不明白为什么。。。
相关文章推荐
- D3d10和D3d11中Map()函数用法一点心得总结
- D3d10和D3d11中Map()函数用法一点心得总结
- D3d10和D3d11中Map()函数用法一点心得总结
- 侧滑菜单的一点小小的总结
- set,list,map集合循环遍历用法总结
- selenium+python 一点用法的总结
- 有关容器的一点小小总结
- java里面的构造方法的一点小小的总结
- MySQL的一点小小总结
- git入门命令学习(自己的一点小小的总结)
- JS中的 map, filter, some, every, forEach, for...in, for...of 用法总结
- (转)std::map的用法总结
- JS中 map, filter, some, every, forEach, for in, for of 用法总结
- MySQL的一点小小总结
- std::map的用法总结
- 标准C++中map容器的用法总结
- [置顶] c++ vector, set, map的用法总结
- map容器的insert用法总结
- RIP的一点小小总结
- 对map和hash_map的一点总结