3 回答
TA贡献1843条经验 获得超7个赞
我同意总有更好的解决方法,但我以某种方式解决了这个问题(请忽略方法,因为答案正是我想要的)。
我有 2 个数组列表 A 和 B,我想知道 A(允许 + 错误值)的哪个元素不在 B(允许值)中,最 重要的是在哪个位置。
我所做的是:
--> 制作了一个数组列表 A_temp 即 A 的副本。(与 A 相同的元素)。
--> 使用 A.removeAll(B)。
这使我的 A 只包含错误值(这是我想要指出的)。
--> 最后,我打印出 A_temp.indexOf(A.get(index))。
TA贡献2080条经验 获得超4个赞
这可能是你想要的。它可能不是执行此操作的优化方式,但您可以从中获得一些想法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class A {
public static void main(String[] args) {
List<String> valuesList = Arrays.asList("aa", "bb", "bb", "bb", "cc", "dd", "ee", "ff", "gg");
List<String> correctValues = Arrays.asList("bb", "dd", "ff");
List wrongPositions = getPositions(valuesList, correctValues);
}
static List getPositions(List<String> values, List<String> correctValues) {
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < values.size(); i++) {
numbers.add(i);
}
List<Integer> correctPositions = new ArrayList<>();
for (String correctValue : correctValues) {
while (values.indexOf(correctValue) > -1) {
correctPositions.add(values.indexOf(correctValue));
values.set(values.indexOf(correctValue), "SomeValueNotContainingInList");
}
}
numbers.removeAll(correctPositions);
return numbers;
}
}
TA贡献1856条经验 获得超11个赞
您可能可以使用 set 执行此任务(基于您的带有字符串的评论示例):
List <String> all = ...
Set <String> allowed = ..
for(String current : all){
if(!allowed.contains(current){
// out of range
}
}
这种方法比利用一组数据结构中的优化搜索线性迭代两个列表的方法更快。
添加回答
举报