优化性能java" for"和"数组字符串"

时间:2015-05-28 07:50:35

标签: 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_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.getId:

public ArrayList getId(String tipo_pasto, String data) {
    ArrayList array_list = new ArrayList();
    Cursor res = db.rawQuery("SELECT ID_CIBO 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("ID_CIBO")));
        res.moveToNext();
    }
    if (res != null) {
        res.close();
    }
    return array_list;
}

这是函数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;
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的数据库查询将是最慢的部分,其中有三个。在没有分析代码的情况下,我将从查看数据库选择和表开始,以确保它们具有正确的索引以便进行有效搜索。

否则,即使在代码中放入一个简单的纳秒计时器,也可以让您了解花费最多时间。

例如

System.nanoTime():

long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
System.out.println("time " + (end -start));