Java中Bean对象根据属性名称获取和设置其值和Map的性能

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值