簡體   English   中英

如何在值對象之一中比較2個arraylist

[英]How to compare 2 arraylist in one of value object

我有兩個arraylist。 如何在運行過程中匹配String的值?

編碼:

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不匹配時,它將繼續加載..可以跳過不匹配的值嗎?

如果沒有,我就沒有第二個:沒有更有效的計算方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM