簡體   English   中英

合並兩個大列表的最有效方法

[英]Most efficient way of combining two big lists

我有兩個列表,每個列表包含2500個值。

List<String> headers = new ArrayList<String>();
List<String> data = new ArrayList<String>();

我需要將這兩個列表組合成一個二維列表或任何其他合適的數據結構,這些結構允許我僅迭代一次,而不是執行下面的操作,這在處理大列表時非常慢:

 for (int i = 0; i < headers.size(); i++) {
    for (int in = 0; in < data.size(); in++) {

       }
 }

當組合這兩個列表時,每個列表的索引彼此匹配是至關重要的。 所以headers.get(9); 必須匹配data.get(9);

我需要一個新的列表或其他數據結構,以允許我將兩個列表中的每個值成對存儲。 所以headers.get(0); 將與data.get(0);配對data.get(0);

任何幫助,將不勝感激。

關於

當組合這兩個列表時,每個列表的索引彼此匹配是至關重要的。

創建一個簡單的類來同時擁有這兩個價值

class MyData{
    String header;
    String data;
}

然后使用單個List<MyData> 您將只有一個2500項List

根據您對這些數據的處理方式,其他集合可能更有效地讀取,但無法更新。

如果您需要一個列表包含與執行嵌套循環相同的對,那么您無能為力。 您要遍歷2500 * 2500 = 6250000對。 沒有什么可以使速度更快。 遍歷一個列表而不是嵌套的for循環不會有什么不同。

如果您不想遍歷兩個列表中元素的每個組合,而是遍歷一個列表一次,然后遍歷另一個列表一次,那么這等效於在另一個變量之后進行一個for循環,而不是在內部進行一個for循環另一個。 無論您將它們組合成一個大列表,還是依次遍歷一個列表然后再遍歷另一個列表, 都將很快。

開設新課程:

class HeadersWithData{
    String header;
    String data;

    HeadersWithData(String header, String data){
        this.header = header;
        this.data = data;
    }
}

聲明您的清單:

List<HeadersWithData> combinedList = new ArrayList<>();

並填寫清單:

for (int i = 0; i < headers.size(); i++){
    combinedList.add(new HeadersWithData(headers.get(i), data.get(i)));
}

注意:這是維列表。 在您的情況下,二維列表沒有任何意義。

我不太確定您提供的循環是否是您真正想要歸檔的內容,但是如果您希望第一個列表的每個元素恰好對應於第二個列表的一個元素,我建議使用Map<String, String> 這使您可以將字符串的第一個列表的每個元素映射到第二個列表的一個元素。 然后將每對存儲為Map.Entry<Key,Value>

這樣,您只能使用以下示例循環在地圖上僅迭代一次:

for(Map.Entry<String,String> entry : map.entrySet()) {...} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM