问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-29 19:04

我来回答

5个回答

热心网友 时间:2022-06-20 05:55

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

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

2. 先把数组排序, 然后逐一比较, 如果有一个元素不相等就返回false. 否则返回true

前面部分和思路1 都一样

只是第2步, 为了省去排序的性能和时间的浪费, 添加两个boolean数组来对应之前的数组,用于标记哪些数字已经使用过了,下次就不要使用了. 虽然代码更多,但是当数组比较长时. 这种方法效率还可以

使用集合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
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
笔记本wifi能够联网,但是台式机插网线网络很差 为什么这个wifi就针对一台电脑卡。 电脑连wifi看电视很卡台式电脑连接无线wifi特别卡 为什么本身台式网速特别快,可是用笔记本wifi的网速就特别慢呢... wifi很快电脑很慢是怎么回事电脑和手机连接同一个WiFi手机网速快但是... ...6个梨,要把这些梨全部放在盘子里,至少需要多少个盘子? 看图列算式,一共有多少个梨? 列式:__ 哪些原因会导致长白头发 头上白发特别多是体内缺什么呢还是病还是别的原因 ACL访问控制列表应用 环球有什么用? java怎么遍历函数返回的数组?? 有什么作用 是什么卡有什么用 鸡蛋和蜜糖为什么不能一起吃呢? 鸡蛋和蜜糖为什么不可以一起吃? 有什么作用? 中国银行有什么作用 鸡蛋能和蜜糖一起吃吗? 鸡蛋和蜜糖可以一起吃吗 鸡蛋+蜜糖可以一起吃吗 蜜糖可以和鸡蛋一起吃吗 中国海洋大学校徽头像 如何看待中山大学在97周年校庆不征集校友意见更换校徽? php 向mysql 表中插入新的数据 衣服面料中起球的成分是什么 tricot 是什么面料 摇粒绒是什么面料,,下面图片有摇粒绒吗,真么辨别,谢谢 请问图片中这种发光的短绒布叫做什么布呢? 100%polyester tricod/triacetate 是什么面料 环球有什么用 保险代理公司可以代办退保吗 武广高速交通事故概率? 通过保险代理公司投保 保险代理公司如何挣钱 最新交通肇事大数据显示:男司机事故发生率为女司机的8.8倍,如何理解? 保险代理公司的这种方式合法吗 什么叫保险代理公司 为什么中国车祸率高? 中国车祸死亡百分之多少是因为玩手机死亡的? 保险代理公司的业务流程是什么 为什么中国的交通事故发生频率特别高 保险代理公司干嘛的 中国每年的撞车事件有哪些?(要统计数据)!!! 快热式电热水器哪些牌子好? 沧州电采暖炉那个牌子的比较好呢? 华为手机为什么找不到华为手机助手? 怎么开通港股股票账户 为什么在手机上找不到华为手机助手应用 华为手机助手下载后怎么找不到?