比较2个int数组中匹配的数字-java
大家好,有人建议用java比较两个数组的最快方法吗 返回交集数组的字符串 如果没有匹配项,则为“nil”值比较2个int数组中匹配的数字-java,java,Java,大家好,有人建议用java比较两个数组的最快方法吗 返回交集数组的字符串 如果没有匹配项,则为“nil”值 static int [] WinnerNumbers; static int [] ClientNumbers; 在执行我的程序之后,我得到了两个填充数组WinnerNumber和ClientNumber,我需要对它们进行比较并返回一个匹配项或null 我想通过一个函数来实现这一点 public static String WinnerChecker(){ prize =
static int [] WinnerNumbers; static int [] ClientNumbers;
在执行我的程序之后,我得到了两个填充数组WinnerNumber和ClientNumber,我需要对它们进行比较并返回一个匹配项或null
我想通过一个函数来实现这一点
public static String WinnerChecker(){
prize = (......)
return prize;
}
使用赢家数组创建一个集合。对于客户端的每个号码,请检查该号码是否存在于集合中 集合包含的是O1 在上的客户端数组上迭代 总体复杂度将持续上升
private static String findWinners(int[] winnerNumbers, int[] clientNumbers) {
Set<Integer> winnerNumberSet = IntStream.of(winnerNumbers).boxed().collect(Collectors.toSet());
Optional<String> output = IntStream.of(clientNumbers)
.filter(winnerNumberSet::contains)
.mapToObj(String::valueOf)
.reduce((result, element) ->
result + ", " + element);
return output.orElse(null);
}
我会这样做。如果没有交集,它将返回一个空字符串,这就是我猜想你所说的nil 印刷品
459
如果两个数组中都存在重复项,并且输出中不需要这些重复项,则在mapToObj进程之前添加方法.distinct
如果希望以数组的形式返回结果,下面的方法可以起作用
public static int[] getIntersection(int[] a, int[] b) {
return Arrays.stream(a)
.flatMap(i -> Arrays.stream(b).filter(k -> i == k))
.toArray();
}
另一种可能比上述方法更有效的方法是使用集合
public static String getIntersection(int[] a, int[] b) {
Set<Integer> seta =
Arrays.stream(a).boxed().collect(Collectors.toSet());
Set<Integer> setb =
Arrays.stream(b).boxed().collect(Collectors.toSet());
seta.retainAll(setb);
return seta.stream().map(String::valueOf)
.collect(Collectors.joining(""));
}
如果需要,可以返回实际的集合。希望下面的代码对您有用
String prize="";
int[] winnerNumbers={ 23,84,32,98,11};
int[] clientNumbers ={ 82, 70,81,98,41,32};
for(int i=0; i< winnerNumbers.length; i++){
for(int j=0; j< clientNumbers.length; j++){
if(winnerNumbers[i] == clientNumbers[j]){
prize = prize + winnerNumbers[i] +" ";
}
}
}
System.out.println(prize);
这里执行线性搜索操作来定位数字。您可以根据数组大小选择Java8流类或其他搜索算法。有关更多搜索算法,请参阅下面的链接。
匹配是否必须处于匹配位置?例如,如果输入是{1,2,3,4}和{5,6,1,4},那么输出应该是{1,4}还是仅仅是{4}?嗨,GBlodgett,输出应该是{1,4}WJS。这个方法非常有效,我花了很多时间研究人们处理这个场景的方式,你的答案是迄今为止编码最简洁的。谢谢你,我注意到了这一点,我的优胜者中有两次是“6”。但这对我来说是有益的,因为我的项目没有在客户选择的每个元素中指定唯一的编号。如果b和a被切换,重复可能是一个问题,但在上下文中,重复发挥我的优势,我张贴更新我的答案,以消除这一点,如果需要的话。这很容易做到。有没有一种方法可以让你在你的第一个答案上贴上“第二个答案”——以防万一其他人想要返回数组。-从谷歌搜索这个,资源是可怕的,所以我认为原始的也将是非常有帮助的人谁想返回数组,而不是像myselfHi沙哈瓦特字符串,谢谢你的答案,我会尝试它作为一种替代方式来实现我的功能。我真的很喜欢你的返回函数,将来会用到它。再次感谢你,谢谢你的帮助。我会尝试一下作为替代品。尝试一下下面来自WJS的代码,这是一种没有很多循环和迭代的新方法。再次感谢各位:
String prize="";
int[] winnerNumbers={ 23,84,32,98,11};
int[] clientNumbers ={ 82, 70,81,98,41,32};
for(int i=0; i< winnerNumbers.length; i++){
for(int j=0; j< clientNumbers.length; j++){
if(winnerNumbers[i] == clientNumbers[j]){
prize = prize + winnerNumbers[i] +" ";
}
}
}
System.out.println(prize);