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


Java,如果你使用的是Spring框架,那么可以通过BeanFactory或者ApplicationContext来根据类名称获取对应的bean对象的名字。下面是一个简单的例子,展示了如何使用ApplicationContext来实现这一功能: ```java import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; // 假设你的Spring配置文件名为"applicationContext.xml" ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取实现了ListableBeanFactory接口的ApplicationContext实例 ListableBeanFactory listableBeanFactory = (ListableBeanFactory) context; // 通过类名获取对应的bean名称列表 String[] beanDefinitionNames = listableBeanFactory.getBeanNamesForType(MyClass.class); // 遍历所有的bean定义名称 for (String beanName : beanDefinitionNames) { // 输出bean定义名称 System.out.println(beanName); } ``` 在这个例子,我们首先创建了一个`ApplicationContext`的实例,这里使用的是`ClassPathXmlApplicationContext`,它从类路径加载Spring配置文件。然后,我们尝试将它强制转换为`ListableBeanFactory`,这样我们就可以调用`getBeanNamesForType()`方法来获取与特定类型相关联的bean名称列表。 请注意,这个例子假设你已经有了一个Spring配置文件,并且`MyClass`是你想要查找的类。如果你想要找到与特定接口或抽象类相关联的bean,只需要将`MyClass.class`替换为相应接口或抽象类的`.class`即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值