运行一个简单的循环花了太多时间

时间:2018-11-20 11:21:30

标签: java android

我正在开发日期转换器,它将日期转换为我的时间。为此,我具有从日期开始到用户指定日期的总天数,该天数将计算这些时间之间的总天数,然后开始计算确切日期。问题是,我正在使用的循环花费的时间更长。

// int startingEngYearForSelection = 1944;
// int startingEngMonthForSelection = 1;
//  int startingEngDayForSelection = 1;

int nepYear = startingNepYearForSelection;
int nepMonth = startingNepMonthForSelection;
int nepDay = startingNepDayForSelection;

Log.e("Time Taken", String.valueOf(System.currentTimeMillis()));

while (totalEngDaysCount != 0)
{
    int daysInIthMonth = EachMonthNumberOfDates.getNepaliMap().get(nepYear)[nepMonth];

    nepDay++;
    if (nepDay > daysInIthMonth) {
        nepMonth++;
        nepDay = 1;
    }
    if (nepMonth > 12) {
        nepYear++;
        nepMonth = 1;
    }

    totalEngDaysCount--;
}

这将以我的格式计算天,月和年,但是花费的时间比我想象的要长。我如何更快地完成任务有什么帮助吗?

编辑: EachNumberOfDates.getNepaliMap()给出每月其他类的总天数。 定义为:

 nepaliMap.put(2000, new int[] { 0, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 });
 nepaliMap.put(2001, new int[] { 0, 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 });

1 个答案:

答案 0 :(得分:1)

  • getNepaliMap仅返回一个字段,O(1)也返回。
  • Map.get,对于几乎所有Map实现,都是O(1)。
  • 数组索引[nepMonth]为O(1)。
  • 所有整数运算和比较都是O(1)。

您无法在此处进行优化。除非您想出一种并行化的方法,否则您无法使其更快。

您要完成的任务并不清楚,但是看起来您可以让每个线程在一定时期内负责计算,然后将结果合并。