java对象操作、DOM4J操作XML以及java反射效率的对比

    最近一直纠结与要不要使用反射,要不要用DOM4J进行业务逻辑中值对象的处理,以及java反射和DOM4J处理的效率哪个更高,今天写了一个小小的测试代码测试了一下:

eclipse中的结构图:


    代码如下:

DocumentAndClassEfficiencyComparisonClassTest.java

package com.test.document_class.clazz;

import java.lang.reflect.Method;
import java.util.Date;

import com.test.document_class.clazz.bean.User;

public class DocumentAndClassEfficiencyComparisonClassTest {
	public void test() throws Exception {
		long start = -1;
		System.out.println(start = System.currentTimeMillis());
		for (int i = 0; i < 10000; i++) {
			User user = (User) Class.forName("com.test.document_class.clazz.bean.User").newInstance();
			Method setAge = User.class.getMethod("setAge", Integer.class);
			setAge.invoke(user, 100);
			
//			User user = new User();
//			user.setAge(100);
//			user.setBirthday(new Date());
//			user.setSex(false);
//			user.setUsername("xiaoming");
		}
		System.out.println((System.currentTimeMillis() - start));
	}
	
	public static void main(String[] args) throws Exception {
		new DocumentAndClassEfficiencyComparisonClassTest().test();
	}
	
}

User.java

package com.test.document_class.clazz.bean;

import java.util.Date;

import net.sf.json.JSONObject;

public class User {
	
	private String username;
	private String password;
	private boolean sex;
	private Integer age;
	private Date birthday;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String toString() {
		return JSONObject.fromObject(this).toString();
	}
	
	public static void main(String[] args) {
		
	}
}

DocumentAndClassEfficiencyComparisonDocumentTest.java

package com.test.document_class.doc;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class DocumentAndClassEfficiencyComparisonDocumentTest {
	public void test() {
		long start = -1;
		System.out.println(start = System.currentTimeMillis());
		
		Document doc = DocumentHelper.createDocument();
		Element root = DocumentHelper.createElement("ROOT");
		doc.add(root);
		Element child = null;
		int loopNum = 10000;
		for (int i = 0; i < loopNum; i++) {
			child = DocumentHelper.createElement("EFFICIENCY");
			child.setText("CHILD TEXT " + i);
			child.setAttributeValue("NAME", "name" + i);
			root.add(child);
		}
		System.out.println((System.currentTimeMillis() - start));
	}
	
	public static void main(String[] args) {
		new DocumentAndClassEfficiencyComparisonDocumentTest().test();
	}
	
}

结果发现:

    1、java对象的直接操作要比其他两种在效率上高两个数量级

    2、DOM4J处理XML的方式以及java反射的方式相比,java反射要比XML效率稍高,基本在同一个级别

    看来以后在开发中,如果业务上允许,还是要多多使用java对象的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值