任何经过优化的解决方案:要获取位于相同位置的两个列表中的元素的索引

时间:2019-02-21 16:55:24

标签: java collections

如果两个元素1和A位于同一位置,我想获得它们的位置。

例如,列表1具有元素{1,1,3,1,5}     清单2具有元素{Q,B,Z,A,c}

输出应为3。

下面是我的代码,它很好用,我正在寻找是否有人有任何优化的解决方案,然后请答复。

或使用 Java8

的解决方案
public class GetIndex {   
     public static void main(String[] args) {
       // TODO Auto-generated method stub
       List<String> one = Arrays.asList("1", "1", "3", "1", "5");
       List<String> two = Arrays.asList("Q", "B", "Z", "A", "C");
       for (int i = 0; i < one.size(); i++) {
            if (one.get(i).equals("1") && two.get(i).equals("A")) {
            System.out.println("Index where 1 & A: " + i);
        }
    }
 }
}

2 个答案:

答案 0 :(得分:1)

相同,但使用的是Java8流api:

IntStream.range(0, one.size()).boxed()
        .filter(i -> one.get(i).equals("1") && two.get(i).equals("A"))
        .forEach(index -> System.out.println("Index " + index));

要存储索引,请使用.collect(Collectors.toList())而不是.forEach(..)。然后整个表达式返回List<Integer>

答案 1 :(得分:0)

您的代码基于one小于或等于two的事实,这可能是不正确的。

您可能想通过使用

进行改进
for (int i = 0; i < Math.min(one.size(), two.size()); i++) {

否则,就运行时复杂性而言,最糟糕的情况是O(N),这时不存在这样的对,并且您不会比单次执行做得更好。