如何流利地比较ArrayList元素?

时间:2018-12-12 22:52:10

标签: java arraylist

我想问你如何比较两个列表,并获得包含第二个列表中第一个列表中元素的信息输出。

示例:

firstList:a c b

secondList:c b a

输出:3 1 2

我尝试过:

for(int i = 0 ; i < firstList.size() ; i++)
{
    System.out.println(secondList.indexOf(firstList.get(i)));
}

但是对于许多数据来说太慢了。我尝试了两个for循环,但是比这慢。你还有其他建议吗?我想解决这个问题。

1 个答案:

答案 0 :(得分:3)

对于“大量数据”,无论您有一个for循环调用indexOf还是两个for循环都会很慢。这些for循环中的每一个都贡献O(n),甚至indexOf也是变相的循环。这些是O(n 2 )个算法。

假设所有元素在列表中都是唯一的,则可以一次浏览列表中的一个,将所需的数字放入HashMap中,查找时间为O(1)。

然后,您只需要使用一个for循环,而改为咨询HashMap

Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < secondList.size(); i++)
{
    map.put(secondList.get(i), i + 1);
}
for(int i = 0 ; i < firstList.size() ; i++)
{
    System.out.println(map.get(firstList.get(i)));
}

这是O(n),对于“大量数据”来说会更好。