java如何在遍历两个数组后,来判断数组的每个元素内容是否一样
发布网友
发布时间:2022-04-29 19:04
我来回答
共5个回答
热心网友
时间:2022-06-20 05:55
思路1: (好理解, 但效率较低,特别是数组较大时)
数组比较每个元素是否相等:
1. 如果数组为null 或者数组的元素个数不相等 , 那么返回false
2. 先把数组排序, 然后逐一比较, 如果有一个元素不相等就返回false. 否则返回true
前面部分和思路1 都一样
只是第2步, 为了省去排序的性能和时间的浪费, 添加两个boolean数组来对应之前的数组,用于标记哪些数字已经使用过了,下次就不要使用了. 虽然代码更多,但是当数组比较长时. 这种方法效率还可以
思路3: (只算一种思路, 也能实现,就不给出具体代码了)
使用集合HashMap(K,V) k存放元素,v存放出现的次数
思路1 参考代码
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
int[] ary1 = { 2, 4, 0, 8, 6 };
int[] ary2 = { 0, 6, 8, 4, 2 };
int[] ary3 = { 0, 0, 8, 4, 2 };
boolean b = compareAry(ary1, ary2);
System.out.println(b ? "ary1和ary2数组元素都相等" : "ary1和ary2数组元素不相等");
boolean b1 = compareAry(ary2, ary3);
System.out.println(b1 ? "ary2和ary3数组元素都相等" : "ary2和ary3数组元素不相等");
}
public static boolean compareAry(int[] ary1, int[] ary2) {
// 如果数组为null 或者 数组的元素个数不相等,直接返回false
if (ary1 == null || ary2 == null || ary1.length != ary2.length) {
return false;
}
if(ary1==ary2){ //如果两个数组哈希值一样, 那么直接返回true,就不必去循环比较了
return true;
}
/*
* 先排序,再逐一比较
*/
//为了排序不会影响原始的数组顺序, 所以把2个数组复制出来
int[] t1 = new int[ary1.length];
System.arraycopy(ary1, 0, t1, 0, ary1.length);
int[] t2 = new int[ary2.length];
System.arraycopy(ary2, 0, t2, 0, ary2.length);
//排序
Arrays.sort(t1);
Arrays.sort(t2);
for (int i = 0; i < t1.length; i++) {
if (t1[i] != t2[i]) {// 只要有一个元素不相等,直接返回false
return false;
}
}
return true;// 前面都没有返回,说明元素都相等,这里就返回true
}
}
思路二
public class ArraysDemo {
public static void main(String[] args) {
int[] ary1 = { 2, 4, 0, 8, 6 };
int[] ary2 = { 0, 6, 8, 4, 2 };
int[] ary3 = { 0, 0, 8, 4, 2 };
boolean b = compareAry(ary1, ary2);
System.out.println(b ? "ary1和ary2数组元素都相等" : "ary1和ary2数组元素不相等");
boolean b1 = compareAry(ary2, ary3);
System.out.println(b1 ? "ary2和ary3数组元素都相等" : "ary2和ary3数组元素不相等");
}
public static boolean compareAry(int[] ary1, int[] ary2) {
// 如果数组为null 或者 数组的元素个数不相等,直接返回false
if (ary1 == null || ary2 == null || ary1.length != ary2.length) {
return false;
}
if(ary1==ary2){//如果两个数组哈希值一样, 那么直接返回true,就不必去循环比较了
return true;
}
boolean[] b1 = new boolean[ary1.length];
boolean[] b2 = new boolean[ary1.length];
for (int i = 0; i < b1.length; i++) {
boolean flag=false;//flag标记 表示是否查找到相同元素 ,初始状态为false
if(b1[i]){//如果b1[i]为true表示b1[i]已结比找到了相同的元素了,所以跳过该元素
continue;
}
int temp = ary1[i];
for (int j = 0; j < b2.length; j++) {
if(b2[j]){//如果b2[j]为true表示b2[j]已结比找到了相同的元素了,所以跳过该元素
continue;
}
if(temp == ary2[j]){//如果找到了相同的元素
flag =true;//找到了相同的元素就设置标记 为true
b1[i] = true;//把b1[i] 和b2[j]都设置为true
b2[j] = true;
}
}
if(flag==false){//也可以写成if(!flag) 表示没有找到相同元素
return false; //直接返回false
}
}
return true;//经历上面重重艰难险阻,都没有返回 , 那么说明两数组的元素内容相同了,返回true
}
}
注意,关于null这个小问题,多写点
每个人理解题目不一样, 题目要求数组每个元素相同,所以,我觉得数组就不能为null了.但是元素个数可以为0
所以 代码如下
.....
// 如果数组为null 或者 数组的元素个数不相等,直接返回false
if (ary1 == null || ary2 == null || ary1.length != ary2.length) {
return false;
}
//如果两个数组哈希值一样, 那么直接返回true,就不必去循环比较了
if(ary1==ary2){
return true;
}
....
当然,有的人认为,两个数组都是null 也可以返回true, 写法如下
......
//null也是等于null的
if (ary1 == ary2) {
return true;
}
if (ary1 != null &&ary2 != null) {
if(ary1.length != ary2.length){//长度不一样,返回false
return false;
}
}else{
return false;//1个数组是null,1个数组不是null,也返回false
}
.....
以上 ~抛砖引玉!
热心网友
时间:2022-06-20 05:55
抓住两个数组比较的核心,A数组每个元素与B数组中元素依次进行比较,分为3(array.length)轮,在两个数组长度相等的情况下,只要任意一轮全匹配不上,那么两个数组不一样。
public static void main(String[] args) {
String[] A = { "a", "b", "c" };
String[] B = { "a", "b", "b" };
if (A.length == B.length) {
for (int i = 0; i < A.length; i++) {
int flag = 0;
for (int j = 0; j < B.length; j++) {
if (!A[i].equals(B[j])) {
flag++;
}
if (flag == B.length) {
System.out.println("两个数组元素个数一样,元素不一样");
return;
}
}
}
System.out.println("两个数组一样");
} else {
System.out.println("两个数组元素个数不一样");
}
}
欢迎大家测试及提宝贵意见。
热心网友
时间:2022-06-20 05:56
public class Test1 {
public static void main(String[] args) {
String[] array1 = { "a", "b", "c" };
String[] array2 = { "b", "c", "a" };
boolean bool = false;
if (array1.length == array2.length) {
for (int i = 0; i < array1.length; i++) {
int j = 0;
while (j < array2.length) {
if (array1[i].equals(array2[j])) {
bool = true;
break;
}
j++;
}
if (!bool) {
break;
}
}
}
if (bool) {
System.out.println("两个数组的内容相同!");
} else {
System.out.println("两个数组的内容不相同!");
}
}
}
热心网友
时间:2022-06-20 05:56
判断两个数组的每个元素,还是一个数组是否有相同的元素?不同数组,如果长度相同,直接一个循环判断里面的元素就好了
热心网友
时间:2022-06-20 05:57
指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。 第二我们可以用一个指针和一个循环来遍历一个数组,看例子: 例三: int array