我想问你如何比较两个列表,并获得包含第二个列表中第一个列表中元素的信息输出。
示例:
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循环,但是比这慢。你还有其他建议吗?我想解决这个问题。
答案 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),对于“大量数据”来说会更好。