java 判断每位不一样_java如何在遍历两个数组后,来判断数组的每个元素内容是否一样...

展开全部

思路1:  (好理解, 但效率较低,特别是数组较大时)

数组比较每个元素是否相等:

1. 如果数组为null 或者数组的元素个数不相等 , 那么32313133353236313431303231363533e78988e69d8331333363376562返回false

2. 先把数组排序, 然后逐一比较, 如果有一个元素不相等就返回false. 否则返回true思路2: (代码稍微多点,但是效率高点)

前面部分和思路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 

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 

boolean flag=false;//flag标记  表示是否查找到相同元素 ,初始状态为false

if(b1[i]){//如果b1[i]为true表示b1[i]已结比找到了相同的元素了,所以跳过该元素

continue;

}

int temp = ary1[i];

for (int j = 0; 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

}

.....

以上 ~抛砖引玉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值