2017-08-17 31 views
0

我有两个数组列表。 如何匹配刚刚运行过程的字符串的值?如何比较2个数组对象中的一个数值对象

编码:

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; 
      } 
     } 
    } 
} 

如果我使用上述步骤,

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

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

+2

的可能的复制[简单的方法来比较2 ArrayLists](https://stackoverflow.com/questions/19155283/simple-way-to-compare-2-arraylists) – Aman

+0

没有...这是为字符串...这我也知道。我的arraylist是对象 –

+0

嗨沙龙,字符串也是对象。因此,链接对于您的要求也是相似的。 :-) – Aman

回答

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)) 
      { 
...