java bean根据名称取对应的列,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 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 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 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 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 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();

MapubMap=new HashMap<>();

MapubMap2=new HashMap<>();

MapubMap3=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

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

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

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

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

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

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

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

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

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

耗时2236msSWITCH_ATTRHASH

耗时1581msSTRING_EQUALS

耗时1564msSWITCH_ATTRL

耗时1595msIF_ATTRL

耗时1579msGET_SET

耗时27894msSTRING_MAP

耗时53701msINTEGER_MAP

耗时58305msLONG_MAP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 java.beans.Introspector 类的 getBeanInfo() 方法来获取 java bean属性描述器,然后使用 PropertyDescriptor 类的 getReadMethod() 方法获取属性的 getter 方法,最后调用 getter 方法获取属性并存储到 map 。 具体实现如下: ```java import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class BeanToMap { public static Map<String, Object> beanToMap(Object obj) throws IntrospectionException, IllegalAccessException, InvocationTargetException { Map<String, Object> map = new HashMap<>(); BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); // 过滤 class 属性 if (!key.equals("class")) { // 得到 property 的 getter 方法 Method getter = property.getReadMethod(); Object value = getter.invoke(obj); map.put(key, value); } } return map; } } ``` 使用示例: ```java Person person = new Person(); person.setName("John"); person.setAge(30); Map<String, Object> map = BeanToMap.beanToMap(person); System.out.println(map); // 输出:{name=John, age=30} ``` 注意:使用这种方法转换的 map 的键名称就是 java bean属性名称,如果希望 map 的键名称java bean属性名称不同,可以使用注解的方式来实现。 ### 回答2: Java BeanMap 是将一个 Java Bean 对象转换成 Map 类型的数据结构。这个转换的目的是为了方便在程序使用 Map 这种键对的数据结构来操作和传递对象属性Java Bean 是指符合一定规范的普通 Java 类,它通常包含私有的属性和公共的 getter/setter 方法。通过这些 getter 方法可以获取属性,通过 setter 方法可以设置属性。 在 Java ,我们可以通过反射的方式来获取对象属性和方法,通过反射可以获取Java Bean 对象的所有属性名称对应属性。接着,我们可以将这些属性名称属性存储到一个新的 Map 对象,其属性名称作为键,属性作为。 下面是一个简单的 Java BeanMap 的示例代码: ```java public Map<String, Object> beanToMap(Object obj) throws IllegalAccessException { Map<String, Object> map = new HashMap<>(); Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String fieldName = field.getName(); Object fieldValue = field.get(obj); map.put(fieldName, fieldValue); } return map; } ``` 上述代码,首先创建一个空的 HashMap 对象用于存储属性名称属性。接着获取传入对象的 Class 实例,并获得该类声明的所有字段。然后通过反射设置字段的可访问性,以便获取私有属性。最后将属性名称对应属性存储到 Map ,并返回这个转换完成的 Map 对象。 这样,我们就可以将 Java Bean 对象转换成 Map 对象,使得在程序更方便地使用和操作对象属性。 ### 回答3: Java BeanMap 是一种将 Java 对象转换为 Map 数据结构的过程。在 Java Java Bean 是一种符合 Java Bean 规范的普通 Java 对象,它包含私有属性、公有的 Getter 和 Setter 方法等。 要将 Java Bean 转换为 Map,可以使用反射机制来获取 Bean属性属性,然后将属性名和属性存储到一个 Map 。下面是一个简单的示例代码: ```java import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class BeanToMapConverter { public static Map<String, Object> convert(Object bean) { Map<String, Object> map = new HashMap<>(); try { Class<?> clazz = bean.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String name = field.getName(); Object value = field.get(bean); map.put(name, value); } } catch (IllegalAccessException e) { e.printStackTrace(); } return map; } public static void main(String[] args) { // 示例使用一个 Student Bean Student student = new Student(); student.setName("张三"); student.setAge(18); student.setGender("男"); Map<String, Object> map = convert(student); System.out.println(map); } } class Student { private String name; private int age; private String gender; 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 getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } } ``` 以上代码通过反射获取 Student 对象属性属性,并将其存储到一个 Map 。最终输出的结果为 `{name=张三, age=18, gender=男}`。这样,就实现了 Java BeanMap 的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值