Java 比较两个数组并检查是否存在重复和缺少的值
我有一个字符串数组x,里面有单词:椅子,桌子,沙发 我还有第二个数组y,上面写着:椅子、勺子、桌子、刀、沙发、毛巾 我想检查x中的所有单词是否都被使用,并且x中的单词在y中没有被使用两次,例如:椅子、勺子、桌子、刀、沙发、毛巾、椅子、冰箱在这个例子中椅子被使用了两次 我的方法是使用一个大小为y的for循环,然后遍历每一个其他索引,因为x的值总是按照这个顺序,并创建一个测试用例数组,但我不知道如何检查x的所有项是否都被使用,以及它们是否没有被使用两次Java 比较两个数组并检查是否存在重复和缺少的值,java,arrays,function,Java,Arrays,Function,我有一个字符串数组x,里面有单词:椅子,桌子,沙发 我还有第二个数组y,上面写着:椅子、勺子、桌子、刀、沙发、毛巾 我想检查x中的所有单词是否都被使用,并且x中的单词在y中没有被使用两次,例如:椅子、勺子、桌子、刀、沙发、毛巾、椅子、冰箱在这个例子中椅子被使用了两次 我的方法是使用一个大小为y的for循环,然后遍历每一个其他索引,因为x的值总是按照这个顺序,并创建一个测试用例数组,但我不知道如何检查x的所有项是否都被使用,以及它们是否没有被使用两次 for(int i = 0 ; i <
for(int i = 0 ; i < y.length; i+=2){
test[i] = x[i];
}
for(int i=0;i
您可以使用地图来存储结果。例如:
Map<String, Integer> counters = new HashMap<>();
for(int i = 0; i < y.length; i++) { // Why do you use i+=2?
String sY = x[i];
if (counters.contains(sY)) {
counters.get(sY)++;
} else {
counters.put(sY, 1);
}
}
for(Don't know the type... counter, counters) {
if ( counter.value() > 1)
throw new IllegalStateException("You used " + counter.key() + " " + counter.value() + " times. Thats too much" );
}
Map counters=newhashmap();
对于(inti=0;i1)
抛出新的IllegalStateException(“您使用了”+counter.key()+“+counter.value()+”次,太多了”);
}
请注意,这段代码永远不会编译,但我希望您能理解。假设您只需要担心一个单词,而不是整个单词数组。你会怎么解决这个问题?你说“然后通过每一个其他的索引,因为x的值总是按照这个顺序排列的”。如果您已经知道如何将
x
中的值放置在y
中,那么为什么还要进行比较呢?这两种标准解决方案是1)在比较之前对数组进行排序,2)使用映射(可能是计数种类的映射)跟踪哪些元素已出现和未出现。解决此问题的一个好方法是将递归
和记忆
合并到程序中。它不仅将尽可能优化,而且还将在动态水平上运行。