您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bean 性能 java