结合两大列表的最有效方法

时间:2017-11-16 20:17:02

标签: java

我有两个列表,每个列表包含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);配对。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

关于

  

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

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

class MyData{
    String header;
    String data;
}

然后使用单个List<MyData>。您只有一个List 2500个项目。

根据您对这些数据的处理方式,其他集合可以更有效地阅读,但不能更新。

答案 1 :(得分:1)

如果你需要一个列表来包含你要做嵌套循环的相同对,那么你无能为力。你迭代超过2500 * 2500 = 6250000对。没有什么能让这么快。迭代一个列表而不是嵌套的for循环不会产生任何影响。

如果你不想迭代两个列表中的每个元素组合,但是迭代一个列表一次,然后迭代另一个列表一次,那么这相当于在另一个列表之后执行一个for循环,而不是一个for循环在另一个里面循环。并且 将是快速的,无论你将它们组合成一个大的列表,还是迭代一个列表然后另一个列表。

答案 2 :(得分:1)

创建一个新课程:

<?php
$a = '<root>
    <prueba>
        <testtag value="1"/>
    </prueba>
    <notprueba>
        <testtag value="1"/>
    </notprueba>
    <prueba>
        <testtag value="2"/>
    </prueba>
</root>';
$doc = new DOMDocument;
$doc->loadXML($a);
$x = new DOMXPath($doc);
$nodes = $doc->getElementsByTagName("prueba");
$xml = "";
foreach ($nodes as $node) {
    $xml .= $doc->saveXML($node);
}
var_dump(htmlentities($xml));

声明你的清单:

class HeadersWithData{
    String header;
    String data;

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

填写清单:

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

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

答案 3 :(得分:0)

我不确定你提出的循环是否是你真正想要的东西,但如果你想要第一个列表中的每个元素都恰好与第二个列表中的一个元素相对应,我建议使用{{1} }。这允许您将第一个字符串列表的每个元素映射到第二个列表的一个元素。然后将每对存储为Map<String, String>

这样你就可以使用例如这样的循环遍历地图一次:

Map.Entry<Key,Value>