优化性能java“;至于;及;数组字符串";

优化性能java“;至于;及;数组字符串";,java,arrays,for-loop,Java,Arrays,For Loop,我对这段代码的速度有问题。 我试图优化它,使它更快,但我不能。 你能给我一些建议吗 这是java代码的一部分: public ArrayList<String> kcal_spu(String tipo_pasto, String data) { kcal_spuntino = new ArrayList<String>(); id_cibi_colazione = DiarioDataBaseAdapter.getId(tipo_pas

我对这段代码的速度有问题。 我试图优化它,使它更快,但我不能。 你能给我一些建议吗

这是java代码的一部分:

public ArrayList<String> kcal_spu(String tipo_pasto, String data) {

        kcal_spuntino = new ArrayList<String>();
        id_cibi_colazione = DiarioDataBaseAdapter.getId(tipo_pasto, data);
        porzione_n2_colazione = DiarioDataBaseAdapter.getPorzione(tipo_pasto, data);
        ArrayList<?> kcal2 = DiarioDataBaseAdapter.getKcal2(tipo_pasto, data);
        int size = id_cibi_colazione.size();
        int j = 0;
        for (int i = 0; i < size; i++) {
            double num_porz = Double.parseDouble(porzione_n2_colazione.get(j));
            String getkcal = FoodDataBaseAdapter.getKcal(id_cibi_colazione.get(j));
            String id_check = id_cibi_colazione.get(j);
            if (id_check.equals("null")) {
                double kcal_porz = Double.parseDouble(kcal2.get(j).toString());
                double result = num_porz * kcal_porz;
                kcal_spuntino.add("" + (int) result);
                j = j + 1;
            } else {
                double kcal_porz = Double.parseDouble(getkcal);
                double result = num_porz * kcal_porz;
                kcal_spuntino.add("" + (int) result);
                j = j + 1;
            }
        }


        return kcal_spuntino;
    }
这是函数DiarioDataBaseAdapter.getPorzione:

public ArrayList getPorzione(String tipo_pasto, String data) {
    ArrayList array_list = new ArrayList();
    Cursor res = db.rawQuery("SELECT PORZIONE from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
    res.moveToFirst();
    while (res.isAfterLast() == false) {
        array_list.add(res.getString(res.getColumnIndex("PORZIONE")));
        res.moveToNext();
    }
    if (res != null) {
        res.close();
    }
    return array_list;
}
这是函数DiarioDataBaseAdapter.getKcal2:

public ArrayList getKcal2(String tipo_pasto, String data) {
    ArrayList array_list = new ArrayList();
    Cursor res = db.rawQuery("SELECT KCAL from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
    res.moveToFirst();
    while (res.isAfterLast() == false) {
        array_list.add(res.getString(res.getColumnIndex("KCAL")));
        res.moveToNext();
    }
    if (res != null) {
        res.close();
    }
    return array_list;
}

提前感谢。

您的数据库查询将是最慢的部分,共有三个查询。在不分析代码的情况下,我将首先查看数据库选择和表,以确保它们具有正确的索引,从而实现高效搜索

否则,即使在代码中加入一个简单的纳秒计时器,也会让您知道什么东西花费的时间最多

例如


你试过分析这段代码吗?可能是数据库操作时间可能会支配总执行时间,代码优化可能不会带来太多收益。可能比StackOverflow更适合CodeReview谢谢您的快速回复。如何创建索引表以优化搜索?我会先分析一下,然后再使用简单的纳秒计时器方法来确定这是否是问题所在。表的主键将已具有索引。这个链接将有助于:好的,现在我分析代码,并告诉您在哪里花费时间。好的,这将是有趣的,让我们知道数字。
public ArrayList getKcal2(String tipo_pasto, String data) {
    ArrayList array_list = new ArrayList();
    Cursor res = db.rawQuery("SELECT KCAL from Diario_Cibo where TIPO_PASTO = '" + tipo_pasto + "' AND DATA = '" + data + "'", null);
    res.moveToFirst();
    while (res.isAfterLast() == false) {
        array_list.add(res.getString(res.getColumnIndex("KCAL")));
        res.moveToNext();
    }
    if (res != null) {
        res.close();
    }
    return array_list;
}
long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
System.out.println("time " + (end -start));