Java 如何流畅地比较ArrayList元素?

Java 如何流畅地比较ArrayList元素?,java,arraylist,Java,Arraylist,我想问一下,我如何比较两个列表,并获得第二个列表中包含第一个列表元素的信息输出 示例: 第一名:a、c、b 第二名单:CBA 产出:3 1 2 我试过: for(int i = 0 ; i < firstList.size() ; i++) { System.out.println(secondList.indexOf(firstList.get(i))); } for(int i=0;i

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

示例:

第一名:a、c、b

第二名单:CBA

产出:3 1 2

我试过:

for(int i = 0 ; i < firstList.size() ; i++)
{
    System.out.println(secondList.indexOf(firstList.get(i)));
}
for(int i=0;i
但是对于很多数据来说速度太慢了。我试过两个for循环,但比这个慢。你还有别的想法吗?我想解决这个问题

对于“大量数据”,无论是一个
用于
循环调用
indexOf
还是两个
用于
循环,都会很慢。每个
for
循环都贡献了O(n),甚至
indexOf
都是伪装的循环。这些是O(n2)算法

假设列表中的所有元素都是唯一的,您可以在其中一个列表中运行一次,将所需的数字放置在
HashMap
中,该HashMap具有O(1)个查找时间

然后,您只需要为
循环使用一个
,而不是查阅
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)));
}
Map Map=newhashmap();
对于(int i=0;i
这是O(n),对于“大量数据”性能更好