方法参数数组列表变量的大小在clear()之后重置为零并分配新的列表值

时间:2016-08-29 06:37:16

标签: java arrays arraylist

下面是我得到一个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();
    }
}

1 个答案:

答案 0 :(得分:2)

以下代码行将对象timeOutRequests分配给引用Stocks_TBCrawled。现在,Stocks_TBCrawledtimeOutRequests都指向同一个列表。

Stocks_TBCrawled  =  timeOutRequests; 
timeOutRequests.clear();

因此,当您调用timeOutRequests.clear();方法时,Stocks_TBCrawledtimeOutRequests指向的列表对象将被清除。

要正确解决此问题,请使用List.addAll(..)方法来实现您的需求。

在你的情况下,这将成为:

Stocks_TBCrawled.addAll(timeOutRequests);
timeOutRequests.clear();

希望这有帮助!