Java 组合两个大列表的最有效方法

Java 组合两个大列表的最有效方法,java,Java,我有两个列表,每个列表包含2500个值 List<String> headers = new ArrayList<String>(); List<String> data = new ArrayList<String>(); List headers=new ArrayList(); 列表数据=新的ArrayList(); 我需要将这两个列表组合成一个二维列表或任何其他适当的数据结构,允许我只迭代一次,而不是执行下面的操作,这在处理大型列表时非

我有两个列表,每个列表包含2500个值

List<String> headers = new ArrayList<String>();
List<String> data = new ArrayList<String>();
List headers=new ArrayList();
列表数据=新的ArrayList();
我需要将这两个列表组合成一个二维列表或任何其他适当的数据结构,允许我只迭代一次,而不是执行下面的操作,这在处理大型列表时非常缓慢:

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

       }
 }
for(int i=0;i
在组合这两个列表时,每个列表的索引是否相互匹配至关重要。所以
headers.get(9)必须匹配
数据。获取(9)

我需要一个新的列表或其他数据结构,允许我将两个列表中的每个值成对存储。So
headers.get(0)将与
数据配对。获取(0)


任何帮助都将不胜感激。

如果您需要一个列表来包含与嵌套循环相同的对,您将无能为力。您正在迭代2500*2500=6250000对。没有什么能让你这么快。迭代一个列表而不是嵌套的for循环不会有什么不同


如果您不想迭代两个列表中的每个元素组合,而是迭代一次一个列表,然后再迭代另一个列表,那么这相当于一个接一个地执行for循环,而不是在另一个列表中执行一个for循环。无论您是将它们组合成一个大列表,还是遍历一个列表然后遍历另一个列表,这都会很快。

如果您需要一个列表包含与嵌套循环相同的对,那么您无能为力。您正在迭代2500*2500=6250000对。没有什么能让你这么快。迭代一个列表而不是嵌套的for循环不会有什么不同


如果您不想迭代两个列表中的每个元素组合,而是迭代一次一个列表,然后再迭代另一个列表,那么这相当于一个接一个地执行for循环,而不是在另一个列表中执行一个for循环。无论你是将它们合并成一个大列表,还是在一个列表上迭代另一个列表,这都会非常快。

我不太确定你提出的循环是否是你真正想要归档的,但是如果您希望第一个列表中的每个元素恰好对应第二个列表中的一个元素,我建议使用
Map
。这允许您将第一个字符串列表的每个元素映射到第二个列表的一个元素。然后将每对存储为
映射项

通过这种方式,您可以使用以下示例循环仅在地图中迭代一次:

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

我不确定您所呈现的循环是否是您真正想要归档的,但是如果您希望第一个列表中的每个元素恰好对应于第二个列表中的一个元素,我建议使用
映射。这允许您将第一个字符串列表的每个元素映射到第二个列表的一个元素。然后将每对存储为
映射项

通过这种方式,您可以使用以下示例循环仅在地图中迭代一次:

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

在组合这两个列表时,每个列表的索引是否相互匹配至关重要

创建一个简单的类来保存这两个值

class MyData{
    String header;
    String data;
}
然后使用单个
列表
。您将只有一个包含2500项的
列表

根据您对这些数据所做的操作,其他收集可能更易于读取,但不会更新。

关于

在组合这两个列表时,每个列表的索引是否相互匹配至关重要

创建一个简单的类来保存这两个值

class MyData{
    String header;
    String data;
}
然后使用单个
列表
。您将只有一个包含2500项的
列表

根据您对这些数据所做的操作,其他集合的读取效率可能会更高,但不会更新。

创建一个新类:

class HeadersWithData{
    String header;
    String data;

    HeadersWithData(String header, String data){
        this.header = header;
        this.data = data;
    }
}
申报你的名单:

List<HeadersWithData> combinedList = new ArrayList<>();
List combinedList=new ArrayList();
并填写以下清单:

for (int i = 0; i < headers.size(); i++){
    combinedList.add(new HeadersWithData(headers.get(i), data.get(i)));
}
for(int i=0;i
注:这是一个一维列表。二维列表在您的情况下没有任何意义。

创建一个新类:

class HeadersWithData{
    String header;
    String data;

    HeadersWithData(String header, String data){
        this.header = header;
        this.data = data;
    }
}
申报你的名单:

List<HeadersWithData> combinedList = new ArrayList<>();
List combinedList=new ArrayList();
并填写以下清单:

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

注:这是一个一维列表。二维列表在您的情况下没有任何意义。

您实际上想要完成什么?您所说的“必须匹配”是什么意思?等于?有些共同财产是相同的吗?共同财产的最相似价值?如果没有匹配项,您会怎么做?@AndyTurner我需要一个新列表或其他数据结构,允许我将两个列表中的每个值成对存储。因此,headers.get(0)将与data.get(0)配对。
for(int i=0;i
。而不是使用数据执行headers.get(0)。get(0)应该创建一个包含字段“header”和字段“data”的对象,并创建该对象的列表,然后可以执行list.get(0).getHeader和list.get(0).getData。希望这能帮上忙。你到底想做什么?你说的“必须匹配”是什么意思?等于?有些共同财产是相同的吗?共同财产的最相似价值?如果没有匹配项,您会怎么做?@AndyTurner我需要一个新列表或其他数据结构,允许我将两个列表中的每个值成对存储。因此,headers.get(0)将与data.get(0)配对。
for(inti=0;i