我有一个表示数据库中条目的Java类。因此,每个字段都是数据库中的一列。
当我想更新该数据库时,我构造了一个ContentValues对象。
是
ArrayList<T> contentValues = new ArrayList<T>()
//bla bla add ten items to contentValues`
比
快ArrayList<T> = new ArrayList<T>(ThisClass.class.getDeclaredFields().length);
//bla bla add ten items to contentValues
getDeclaredFields
的绝对表现是什么?我希望有人能够指出getDeclaredFields
的工作原理。我知道容器的大小调整是如何工作的,但我不知道getDeclaredFields
如何工作以及如何工作。
答案 0 :(得分:5)
使用与ContentValues相同的设置使用简单的HashMap进行微基准测试(假设这是您所指的类),并添加10个字段(即一个调整大小操作):
Benchmark Mean Mean error Var Units
c.a.p.g.a.Reflection.getDeclaredFields 326.405 5.989 33.961 nsec/op
c.a.p.g.a.Reflection.resize 247.581 7.377 51.520 nsec/op
所以getDeclaredFields
比调整地图大小要慢一些,但桌面PC上的差异只有100纳秒。
向ThisClass
添加更多字段时,getDeclaredFields
会变慢,所以我倾向于使用自动调整大小的方法。
代码:
@GenerateMicroBenchmark(BenchmarkType.AverageTimePerOp)
public Map getDeclaredFields() {
Map m = new HashMap(ThisClass.class.getDeclaredFields().length, 1.0f);
for (int i = 0; i < 9; i++) {
m.put(i, "a");
}
return m;
}
@GenerateMicroBenchmark(BenchmarkType.AverageTimePerOp)
public Map resize() {
Map m = new HashMap(8, 0.75f);
for (int i = 0; i < 9; i++) {
m.put(i, "a");
}
return m;
}
class ThisClass {
private int i, j, k;
public String s, t, u;
protected List l, m, n;
}
答案 1 :(得分:0)
ContentValues contentValues = new ContentValues()
我会说执行时间差异不大。