我有两个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不匹配时,它会继续加载..可以跳过不匹配的值吗?
答案 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))
{
...