[英]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.