Java如何比较无序字符串数组
我必须修改字符串数组 阵列1Java如何比较无序字符串数组,java,Java,我必须修改字符串数组 阵列1 Dog Cat Mouse Chicken 阵列2 Cat Dog Mouse Chicken 如何检查数组是否包含相同的元素(顺序无关紧要) 我想我应该先对数组进行排序,然后再进行比较 我在寻找一个布尔答案 编辑使用Java UTIL对我来说是一种选择,我只是对Java不够熟悉 ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1)); ArrayList<
Dog
Cat
Mouse
Chicken
阵列2
Cat
Dog
Mouse
Chicken
如何检查数组是否包含相同的元素(顺序无关紧要)
我想我应该先对数组进行排序,然后再进行比较
我在寻找一个布尔答案
编辑使用Java UTIL对我来说是一种选择,我只是对Java不够熟悉
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
}
检查大小是否相等是多余的,因为如果我们有以下列表:
Cat
Cat
Dog
及
表达式的计算结果为true,但它们的元素并不完全相同String arr1[]={//your content go here};
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;
字符串arr2[]={//您的内容放在这里};
Arrays.sort(arr1);
Arrays.sort(arr2);
如果(arr1.length!=arr2.length){
复述错误;
}否则{
布尔相似=真;
for(int i=0;i
只需对这两个元素进行排序,然后迭代元素以比较它们:
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;
}
这很容易。就这样做吧:
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!");
ArrayList firstArray=new ArrayList();
ArrayList secondArray=新的ArrayList();
firstArray.add(“Dog”);
添加(“Cat”);
添加(“鼠标”);
firstArray.add(“Chicken”);
secondArray.add(“Cat”);
secondArray.add(“Dog”);
secondArray.add(“鼠标”);
第二个数组。添加(“鸡肉”);
布尔值areEqual=firstArray.containsAll(secondArray);
如果(相等)
System.out.println(“瞧!”);
其他的
System.out.println(“Oppps!”);
以下是方法:
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;
}
我能告诉你怎么做吗
-最好的方法可能是对数组进行排序和比较,比如集合(Arrays.sort(arrayToSort)
),对象(Arrays.equals(arr1,arr2)
)
-另一种方法是迭代第1个和第2个数组,并尝试一个接一个地查找项目(不好的主意,不是很有效,但很好理解和解释)-类似于以下内容:
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);
}
String[]arr1={“狗”、“猫”、“老鼠”、“鸡”};
//字符串[]arr2={“狗”、“鼠”、“鸡”}//错误的
字符串[]arr2={“猫”、“狗”、“老鼠”、“鸡”}//真的
布尔值foundAll=true;
如果(arr1.length!=arr2.length){
foundAll=false;
}否则{
for(int i=0;i
对它们进行排序、迭代和比较。两个数组*。如果您想使用ArrayList
,请查看我的答案。你甚至不需要做任何排序。我认为第二个条件是冗余。你应该首先检查大小,这样你就可以“快速失败”,如果这是false
@Alist3r,则一个列表可以包含其他元素的所有元素以及更多元素@JordiCastilla则大小检查将失败。如果您首先检查大小,那么您就可以比较ArrList1是否包含Arrlist2的所有元素。firstArray
可能包含secondArray
的所有元素以及更多元素,从而使它们不相等。@jonk我假设它们的大小相似,如果不是,那么这个问题就没有意义了!你的逻辑让我得了癌症。问题只是“两个数组是否包含相同的元素”:如果一个数组包含不在另一个数组中的元素,那么答案是否定的。根据你的代码,数组['A'、'B'、'B']和['A'、'A'、'B']相等,这就是wrong@user902383从技术上讲,他们是平等的。这是用法的问题。如果你问我,这些数组必须先规范化,然后检查它们是否相同。如果你熟悉数学
和集合论
,那么我所说的就不难理解了。你可能想重新检查在Java中应该如何比较字符串。谢谢Tom!这是我的错…只是做了更正:)你可以稍微优化一下,即你可以返回false,而不是将值赋给相似的ismilar
Arrays.equals(Arrays.sort(arr1.clone()), Arrays.sort(arr2.clone()));
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!");
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;
}
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);
}