下面是我得到一个arraylist的代码,从中填充另一个临时数组
在第一次循环之后,第二次以后,Stocks_TBCrawled在if块中被分配了正确的值,但在for循环中,大小重置为零。
请告诉我这个逻辑在哪里出错?
public void doConnectCall(List<String> Stocks_TBCrawled){
try{
timeOutRequests = new ArrayList<String>();
int retryCount = 0;
while(retryCount < 3){
if(retryCount != 0 ){
Stocks_TBCrawled.clear();
Stocks_TBCrawled = timeOutRequests;
timeOutRequests.clear();
}
for(int listCounter = 0; listCounter < Stocks_TBCrawled.size(); listCounter++ ){
try{
mfCount = 0;
doc = Jsoup.connect("http:xxx ).timeout(3000).get();
}catch(Exception e){
timeOutRequests.add(Stocks_TBCrawled.get(listCounter));
continue;
}
}
retryCount++;
}
}catch(Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:2)
以下代码行将对象timeOutRequests
分配给引用Stocks_TBCrawled
。现在,Stocks_TBCrawled
和timeOutRequests
都指向同一个列表。
Stocks_TBCrawled = timeOutRequests;
timeOutRequests.clear();
因此,当您调用timeOutRequests.clear();
方法时,Stocks_TBCrawled
和timeOutRequests
指向的列表对象将被清除。
要正确解决此问题,请使用List.addAll(..)
方法来实现您的需求。
在你的情况下,这将成为:
Stocks_TBCrawled.addAll(timeOutRequests);
timeOutRequests.clear();
希望这有帮助!