如何在一个值对象中比较2个arraylist

时间:2017-08-17 09:55:06

标签: java

我有两个arraylist。 如何匹配刚刚运行proccess的String值?

编码:

true

如果我使用上述步骤,

ArrayList<TimeSeriesObject> arrayDayMinutes = new ArrayList<TimeSeriesObject>();
List<GetTimeSeriesResponseType.Row> rows = (List<Row>) el.getObjectValue();

for (i = iStart; i < arrayDayMinutes.size(); i++)
{
    for (int j = n; j < rows.size(); j++)
    {
        nLoop++;
        if (arrayDayMinutes.get(i).getTimeStamp().equals(ConvertDateTime(rows.get(j).getTIMESTAMP().toGregorianCalendar())))
        {
           // khteo 20140211
           if (arrayDayMinutes.get(i).getTimeStamp().equals(ConvertDateTime(rows.get(j).getTIMESTAMP().toGregorianCalendar(), marketInfo.getTimezone())))
           {
               arrayDayMinutes.get(i).setOpen(rows.get(j).getOPEN());
               arrayDayMinutes.get(i).setHigh(rows.get(j).getHIGH());
               arrayDayMinutes.get(i).setLow(rows.get(j).getLOW());     
               arrayDayMinutes.get(i).setClose(rows.get(j).getCLOSE());
               try
               {
                   arrayDayMinutes.get(i).setVolume(rows.get(j).getVOLUME());
               }
               catch (NullPointerException npe)
               {
                   arrayDayMinutes.get(i).setVolume(0);
               }
               n = j + 1;
               long executeReques_end = System.currentTimeMillis();
               // System.out.println("After 2nd loop:" + executeReques_end +"|total timing " + (executeReques_end-executeRequest_2ndbeforeLoop));
               break;
           }
        }
    }
}

上面的代码表现不好......如何提高性能?当ArrayList不匹配时,它会继续加载..可以跳过不匹配的值吗?

1 个答案:

答案 0 :(得分:0)

我不会得到第二个:如果还有更有效的计算方法:

arrayDayMinutes.get(i).getTimeStamp().equals(ConvertDateTime(rows.get(j).getTIMESTAMP().toGregorianCalendar(), marketInfo.getTimezone()))

当你知道:

arrayDayMinutes.get(i).getTimeStamp().equals(ConvertDateTime(rows.get(j).getTIMESTAMP().toGregorianCalendar()))

是真的吗?

例如:

    Calendar cal = rows.get(j).getTIMESTAMP().toGregorianCalendar();
    if (cal.getTimeZone().equals(marketInfo.getTimeZone())
            && arrayDayMinutes.get(i).getTimeStamp().equals(ConvertDateTime(cal)))
    {

在任何情况下,如果ConvertDateTime成本很高,那么将它保存在缓存中以避免计算是多次是值得的:

    // assuming that TimeSeriesObject.getTimeStamp() returns a Date
    Date[] cache = new Date[rows.size()];
    for (i = iStart; i < arrayDayMinutes.size(); i++)
    {
        for (int j = n; j < rows.size(); j++)
        {
            Date timestamp = cache[j];
            if (timestamp == null) {
                timestamp = ConvertDateTime(rows.get(j).getTIMESTAMP().toGregorianCalendar());
                cache[j] = timestamp;
            }
            nLoop++;
            if (arrayDayMinutes.get(i).getTimeStamp().equals(timestamp))
            {
...