Java中Bean对象根据属性名称获取和设置其值和Map的性能
2017-02-17 10:25
447 查看
package com.test; import java.util.HashMap; import java.util.Map; /**@类名 UserBean * @说明 * @作者 Fabuler * @日期 2017年2月16日-下午5:58:19 */ public class UserBean { private String id; private String name; private int age; private String address; private String email; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private int addressHash="address".hashCode(); private int emailHash="email".hashCode(); private int nameHash="name".hashCode(); private int ageHash="age".hashCode(); @SuppressWarnings("unchecked") public <T>T getAttr(int attrHash){ if(attrHash==addressHash){ return (T) address; }else if(attrHash==emailHash){ return (T)email; }else if(attrHash==nameHash){ return (T)name; }else if(attrHash==ageHash){ return (T)new Integer(age); } return null; } public void setAttr(int attrHash,Object value){ if(attrHash==addressHash){ this.address=(String) value; }else if(attrHash==emailHash){ this.email=(String) value; }else if(attrHash==nameHash){ this.name=(String) value; }else if(attrHash==ageHash){ this.age=(int) value; } } @SuppressWarnings("unchecked") public <T>T getAttr3(int attrHash){ switch (attrHash) { case -1147692044: return (T)address; case 96619420: return (T)email; case 3373707: return (T)name; case 96511: return (T)new Integer(age); default: return null; } } public void setAttr3(int attrHash,Object value){ switch (attrHash) { case -1147692044: this.address=(String)value; break; case 96619420: this.email=(String)value; break; case 3373707: this.name=(String)value; break; case 96511: this.age=(int)value; break; default: break; } } @SuppressWarnings("unchecked") public <T>T getAttr(String attr){ if("address".equals(attr)){ return (T) address; }else if("email".equals(attr)){ return (T)email; }else if("name".equals(attr)){ return (T)name; }else if("age".equals(attr)){ return (T)new Integer(age); } return null; } public void setAttr(String attr,Object value){ if("address".equals(attr)){ this.address=(String) value; }else if("email".equals(attr)){ this.email=(String) value; }else if("name".equals(attr)){ this.name=(String) value; }else if("age".equals(attr)){ this.age=(int) value; } } @SuppressWarnings("unchecked") public <T>T getAttr2(String attr){ switch (attr.length()) { case 7: return (T) address; case 5: return (T)email; case 4: return (T)name; case 3: return (T)new Integer(age); default: return null; } } public void setAttr2(String attr,Object value){ switch (attr.length()) { case 7: this.address=(String) value; case 5: this.email=(String)value; break; case 4: this.name=(String)value; break; case 3: this.age=(int)value; break; default: break; } } @SuppressWarnings("unchecked") public <T>T getAttr4(String attr){ int attrl=attr.length(); if(attrl==7){ return (T) address; }else if(attrl==5){ return (T)email; }else if(attrl==4){ return (T)name; }else if(attrl==3){ return (T)new Integer(age); } return null; } public void setAttr4(String attr,Object value){ int attrl=attr.length(); if(attrl==7){ this.address=(String) value; }else if(attrl==5){ this.email=(String) value; }else if(attrl==4){ this.name=(String) value; }else if(attrl==3){ this.age=(int) value; } } public static void main(String[] args) { UserBean ub=new UserBean(); Map<String, Object>ubMap=new HashMap<>(); Map<Integer, Object>ubMap2=new HashMap<>(); Map<Long, Object>ubMap3=new HashMap<>(); long limit=1000000000l; int addressAttr="address".hashCode(); int emailAttr="email".hashCode(); int nameAttr="name".hashCode(); int ageAttr="age".hashCode(); long addressAttrL=(long)addressAttr<<32; long emailAttrL=(long)emailAttr<<32; long nameAttrL=(long)nameAttr<<32; long ageAttrL=(long)ageAttr<<32; long t; t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAttr(addressAttr, "西直门上帝街"); ub.getAttr(addressAttr); ub.setAttr(emailAttr, "西直门上帝街"); ub.getAttr(emailAttr); ub.setAttr(nameAttr, "西直门上帝街"); ub.getAttr(nameAttr); ub.setAttr(ageAttr, 123); ub.getAttr(ageAttr); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\t==_ATTRHASH"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAttr3(addressAttr, "西直门上帝街"); ub.getAttr3(addressAttr); ub.setAttr3(emailAttr, "西直门上帝街"); ub.getAttr3(emailAttr); ub.setAttr3(nameAttr, "西直门上帝街"); ub.getAttr3(nameAttr); ub.setAttr3(ageAttr, 123); ub.getAttr3(ageAttr); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tSWITCH_ATTRHASH"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAttr("address", "西直门上帝街"); ub.getAttr("address"); ub.setAttr("email", "西直门上帝街"); ub.getAttr("email"); ub.setAttr("name", "西直门上帝街"); ub.getAttr("name"); ub.setAttr("age", 123); ub.getAttr("age"); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tSTRING_EQUALS"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAttr2("address", "西直门上帝街"); ub.getAttr2("address"); ub.setAttr2("email", "西直门上帝街"); ub.getAttr2("email"); ub.setAttr2("name", "西直门上帝街"); ub.getAttr2("name"); ub.setAttr2("age", 123); ub.getAttr2("age"); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tSWITCH_ATTRL"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAttr4("address", "西直门上帝街"); ub.getAttr4("address"); ub.setAttr4("email", "西直门上帝街"); ub.getAttr4("email"); ub.setAttr4("name", "西直门上帝街"); ub.getAttr4("name"); ub.setAttr4("age", 123); ub.getAttr4("age"); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tIF_ATTRL"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ub.setAddress("西直门上帝街"); ub.getAddress(); ub.setEmail("西直门上帝街"); ub.getEmail(); ub.setName("西直门上帝街"); ub.getName(); ub.setAge(123); ub.getAge(); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tGET_SET"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ubMap.put("address", "西直门上帝街"); ubMap.get("address"); ubMap.put("email", "西直门上帝街"); ubMap.get("email"); ubMap.put("name", "西直门上帝街"); ubMap.get("name"); ubMap.put("age", 123); ubMap.get("age"); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tSTRING_MAP"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ubMap2.put(addressAttr, "西直门上帝街"); ubMap2.get(addressAttr); ubMap2.put(emailAttr, "西直门上帝街"); ubMap2.get(emailAttr); ubMap2.put(nameAttr, "西直门上帝街"); ubMap2.get(nameAttr); ubMap2.put(ageAttr, 123); ubMap2.get(ageAttr); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tINTEGER_MAP"); t=System.currentTimeMillis(); for(long i=0;i<limit;i++){ ubMap3.put(addressAttrL, "西直门上帝街"); ubMap3.get(addressAttrL); ubMap3.put(emailAttrL, "西直门上帝街"); ubMap3.get(emailAttrL); ubMap3.put(nameAttrL, "西直门上帝街"); ubMap3.get(nameAttrL); ubMap3.put(ageAttrL, 123); ubMap3.get(ageAttrL); } System.out.println("耗时"+(System.currentTimeMillis()-t)+"ms\tLONG_MAP"); } }
运行结果
耗时5673ms ==_ATTRHASH
耗时2236ms SWITCH_ATTRHASH
耗时1581ms STRING_EQUALS
耗时1564ms SWITCH_ATTRL
耗时1595ms IF_ATTRL
耗时1579ms GET_SET
耗时27894ms STRING_MAP
耗时53701ms INTEGER_MAP
耗时58305ms LONG_MAP
相关文章推荐
- 【分享】java反射获取、设置、打印对象属性,对象转map基础工具
- java获取对象属性类型、属性名称、属性值 【转】
- java获取对象属性类型、属性名称、属性值
- 对dao层封装后可以实现根据某一条属性查找到相应的javabean对象
- java获取对象属性类型、属性名称、属性值
- java获取对象属性类型、属性名称、属性值
- Java 小例子:根据 Map 对象的内容创建 JavaBean
- java获取对象属性类型、属性名称、属性值
- java获取对象属性类型、属性名称、属性值
- 利用Java反射根据属性名获取对象值和类型代码
- Spring 根据Bean注册的名称获取Bean对象
- 根据Java对象获取里面的方法,属性
- java获取对象属性类型、属性名称、属性值
- 根据属性名称 获取对象的属性值
- Java中Thread类currentThread获取多线程对象和为线程设置名称的方法
- Spring 根据Bean注册的名称获取Bean对象
- java获取对象属性类型、属性名称、属性值
- java Enum 枚举帮助类,根据值或者名称获取枚举类型对象(从ITEYE搬家过来的)
- java反射之Field 获取对象属性及设置属性值
- java使用反射机制根据属性名获取object对象指定属性的值