2015-10-05 71 views
0

我有信息的字符串數組是這樣的:在如何比較數組與新創建的列表的Java

name   street   streetnumber   City  house  flat 
jetsons  jetstreet  12     london  yes  no 
jetsons  jetstreet  10     washingston n  y 
jetsons  jetstreet  10     washingston n  y 
jetsons  jetstreet  10     washingston yes  no 
ALF   alfStreet   3     Shanghai  y  y 

...所以現在的運動是建立一個新的列表與獨特的數據進行分析。

livingDataArray analyzedDataList

while(livingDataArray=reader.readLine() != null){ 
     street = livingDataArray[1]; 
     streetNumber = livinDataArray[2]; 
     city = livingDataArray[3;] 

    if(analyzedDataList.isEmpty()) { 
     createNewEntry in analyzedDataList(); // that line is fine. ;) 
    } else { 
     int analyzedDataSize = analyzedData.size(); 
     for (int i = 0; i <= analyzedDataSize; i++){ 

        if(analyzedData.get(i)[1] == street && 
        analyzedData.get(i)[2] == streetNumber && 
        analyzedData.get(i)[3] == city) { 

        categorize(); // this line is fine also 
        addToAnalyzedData(); 
        break; 
        } else if (!(analyzedData.get(i)[1] == street && 
        analyzedData.get(i)[2] == streetNumber && 
        analyzedData.get(i)[3] == city) && (i+1 == 
        livingData.size())) { 

          categorize(); 
          addToAnalyzedData(); 
          break; 
        } 


      } 
     } 
} 

我的問題是效率不夠高,用它來做真正的大數據?像100.000行和更多?因爲我不是關於if else的陳述。有人能幫助我嗎?

+2

我會使用'Set'。 –

+0

這不是真的Java。有些陳述是無效的。你在沒有括號的比較中有一個賦值,並且你用'=='比較字符串。爲什麼你不顯示正確編譯的代碼?此外,你應該顯示你正在使用的東西的定義。 – RealSkeptic

回答

0

String比較工作通過equals而不是==How do I compare strings in Java?)。下一點:這看起來像是java中的一個簡單的SELECT DISTINCT * FROM someWhere-SQL中的實現。那麼爲什麼不簡單地將代碼外包給數據庫呢?如果這是不可能的,Set將最有可能是最有效的收集。雖然我建議使用SQL來提高性能,並節省本地PC上的資源。最後一點:在遍歷喜歡這裏的相同數據修改數據:

int analyzedDataSize = analyzedData.size(); 
for (int i = 0; i <= analyzedDataSize; i++){ 
    ... 
     addToAnalyzedData(); 

是非常容易的錯誤/異常。對於例如您正在檢索並修改上述循環中的集合,而不更新集合的大小。在這個例子中,這種行爲不會造成任何損害,但您應該小心處理。