我必须使用字符串数组
数组1
Dog
Cat
Mouse
Chicken
数组2
Cat
Dog
Mouse
Chicken
如何检查数组是否包含相同的元素(顺序无关紧要)
我想我应该首先对数组进行排序而不是比较
我正在寻找布尔答案
编辑使用Java utils是我的选择,我只是不熟悉JAVA
答案 0 :(得分:4)
只需对它们进行排序并迭代元素以将它们全部进行比较:
public boolean compareStringArrays(String[] arr1, String[] arr2) {
if (arr1.length != arr2.length)
return false;
String[] arr1Copy = arr1.clone();
String[] arr2Copy = arr2.clone();
Arrays.sort(arr1Copy);
Arrays.sort(arr2Copy);
for (int i=0; i<arr1Copy.length; i++) {
if (!arr1Copy[i].equals(arr2Copy[i]))
return false;
}
return true;
}
请注意,我在这里制作了数组的副本:这样就保留了传入的数组的原始顺序。还有一个优化来检查长度是否相同,就好像一个数组中的元素多于另一个数组,它们显然不相等。
修改强>
你也可以使用Arrays.equals()
而不是for循环(我原本没想到但现在看起来很明显),所以你可以通过单行实现这一点:
Arrays.equals(Arrays.sort(arr1.clone()), Arrays.sort(arr2.clone()));
答案 1 :(得分:1)
ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1));
ArrayList<String> arrList2 = new ArrayList<>(Arrays.asList(arr2));
Collections.sort(arrList1);
Collections.sort(arrList2);
if (Arrays.equals(arrList1.toArray(), arrList2.toArray())) {
//They have exactly the same elements
}
编辑: 老答案:
ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1));
ArrayList<String> arrList2 = new ArrayList<>(Arrays.asList(arr2));
if (arrList1.containsAll(arrList2) && arrList2.containsAll(arrList1)) {
//They have the same elements, not necessarily the same number
}
最佳答案将告诉您它们是否包含相同的元素,以及它们是否具有相同的数字,底部答案将告诉您它们是否具有相同的元素,但不会告诉您是否有任何元素重复
再次编辑: 首先我发布了:
if (arrList1.containsAll(arrList2) && arrList2.containsAll(arrList1)
&& arrList1.size() == arrList2.size())
检查大小是否相等是多余的,因为如果我们有列表:
Cat
Cat
Dog
和
Cat
Dog
Dog
表达式将评估为true,但它们没有完全相同的元素
答案 2 :(得分:1)
以下是方法:
public boolean compareArray(){
boolean isSameArray=false;
String[] arr1={"Dog","Cat","Mouse","Chicken"};
String[] arr2={"Cat","Dog","Mouse","Chicken"};
Arrays.sort(arr1);
Arrays.sort(arr2);
if(Arrays.equals(arr1, arr2)){
isSameArray=true;
}else{
isSameArray=false;
}
return isSameArray;
}
答案 3 :(得分:0)
这很容易。就这样做:
ArrayList<String> firstArray=new ArrayList<>();
ArrayList<String> secondArray=new ArrayList<>();
firstArray.add("Dog");
firstArray.add("Cat");
firstArray.add("Mouse");
firstArray.add("Chicken");
secondArray.add("Cat");
secondArray.add("Dog");
secondArray.add("Mouse");
secondArray.add("Chicken");
boolean areEqual=firstArray.containsAll(secondArray);
if(areEqual)
System.out.println("Voila!");
else
System.out.println("Oppps!");
答案 4 :(得分:0)
可能如何做到这一点
- 可能最好的方法是进行排序并比较像集合(Arrays.sort(arrayToSort)
),对象(Arrays.equals(arr1,arr2)
)这样的数组
- 另一种方法是迭代第一和第二阵列并尝试逐个查找项目(不好主意,不是那么有效,但很好理解和解释) - 如下所示:
String[] arr1={"Dog","Cat","Mouse","Chicken"};
//String[] arr2={"Dog","Mouse","Chicken"}; //FALSE
String[] arr2={"Cat","Dog","Mouse","Chicken"}; //TRUE
boolean foundAll = true;
if(arr1.length != arr2.length){
foundAll = false;
}else{
for (int i = 0; i < arr1.length; i++) {
boolean foundActual = false;
for (int j = 0; j < arr2.length; j++) {
if(arr1[i].equals(arr2[j])){
foundActual = true;
break;
}
System.out.println("arr1 elem: " + arr1[i] + " arr2 elem: "+ arr2[j]);
}
System.out.println("\n");
if(!foundActual){
foundAll = false;
break;
}
}
}
System.out.println("found all: " + foundAll);
}
答案 5 :(得分:-1)
String arr1[] = {//your content goes here};
String arr2[] = {//your content goes here};
Arrays.sort(arr1);
Arrays.sort(arr2);
if(arr1.length != arr2.length){
retrn false;
}else{
boolean isSimilar = true;
for(int i=0; i< arr1.length; i++){
if(!(arr1[i].equals(arr2[i]))){
isSimilar = false;
}
}
}
return isSimilar;