ace*_*es. 14 java apache comparison performance comparator
考虑一个简单的类:
class Employee {
String name;
int sal;
....//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我可以创建一个Comparator来对字段名称进行排序.
class EmpSortByName implements Comparator<Employee>{
@Override
public int compare(Employee e1, Employee e2){
return e1.getName().compareTo(e2.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,看看apache commons BeanComparator,可以通过以下方式实现排序:
BeanComparator bc = new BeanComparator("name");
Collections.sort(employeeList, bc);
Run Code Online (Sandbox Code Playgroud)
因此,通过使用BeanComparator,我可以用最少的代码实现排序.使用Comparators和BeanComparators之间的权衡是什么:在性能,使用场景(多个字段排序,其他因素)方面?
我也明白要使用BeanComparator,必须导入beanutils jar.
JB *_*zet 20
BeanComparator使用反射来访问name属性并比较这两个对象.虽然反射性能有所提高,但仍然没有直接访问字段那么快.这是否重要取决于您在应用程序中调用的次数以及在哪种情况下.
另一个问题是,如果你重构方法,并改名为getLastName()
,使用BeanComparator的代码不会被重构,问题会被忽视,直到运行时(或单元测试时间).
坦率地说,实现一个比较器是如此简单,我不认为使用反射是一个好主意.避免4行简单代码的好处不足以弥补它导致的性能和可维护性问题.
归档时间: |
|
查看次数: |
10308 次 |
最近记录: |