0

我有一个 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

4

2 回答 2

5

使用与ContentValues相同的设置(假设这是您所指的类)并添加 10 个字段(即一个调整大小操作)的简单 HashMap 的微型基准测试:

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

SogetDeclaredFields比一次调整地图大小要慢一些,但在台式 PC 上差异仅为 100 纳秒左右。

向 中添加更多字段时ThisClassgetDeclaredFields速度会变慢,因此我更喜欢自动调整大小的方法。

代码:

@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;
}
于 2013-05-06T10:05:20.187 回答
0
ContentValues contentValues = new ContentValues()

我会说执行时间差异并不显着。

于 2013-05-06T09:45:18.423 回答