两个数组比较的问题 现有两个数组 str1[] = {"2","3","4"}; str2[] = {"3,"4,"5,"6}; 现要实现将str2数组和str1数组比较,取出str2中相比str1中增加的和减少的值,并要得到该值是新增的还是删除的 组成一个新的数组。 如str1和str2比较得到的数组是{["2","-"],["5","+"],["6","+"]} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单的用循环就可以了先用str2 中的每一个和str1中的比较 没找到 就是+的然后反过来用str1中每一个 和str2的比较 没有的 就是-的 public static void main(String[] args) { String[] str1 = { "2", "3", "4" }; String[] str2 = { "3", "4", "5", "6" }; String[][] d = compareStrArray(str1, str2); for(int i = 0; i<d.length; i++){ for(int j = 0, jlen = d[i].length ; j < jlen; j++){ if(j > 0) System.out.print(","); System.out.print(d[i][j]); } System.out.println(); } } public static String[][] compareStrArray(String[] str1, String[] str2) { List<String[]> resultList = new ArrayList<String[]>(); List<String> list2 = new ArrayList<String>(); for (String s : str2) { list2.add(s); } for (String s1 : str1) { boolean existed = false; for (int i = list2.size() - 1; i > -1; i--) { String s2 = list2.get(i); if (s2.equals(s1)) { existed = true; list2.remove(i); break; } } if (!existed) { resultList.add(new String[] { s1, "-" }); } } for (String s : list2) { resultList.add(new String[] { s, "+" }); } String[][] ret = new String[resultList.size()][]; for(int i = 0 ; i < resultList.size() ; i++){ ret[i] = resultList.get(i);; } return ret; } 你的意思就是以str2为被比较数组,如果发现str1中存在而str2不存在 那么就表示缺少: 就是“X”,“-”如果str2有可是str1没有的元素 那么就是多余 :“Y”,“+”是这个意思吗? 我觉得这样的表述更容易理解个人觉得楼上的想法是对的, 不过没有必要再遍历第二个数组了,遍历第一个数组 再进行比较时 用一个变量记录就好了,只要第二个数组中没有被标记的就是多余的,这样时间复杂度就低了,个人看法 欢迎拍砖 试试这个吧~~~~ public static void main(String[] args) { String str1[] = {"2","3","4"}; String str2[] = {"3","4","5","6"}; List<String> addList = new ArrayList<String>(); for (int i = 0; i < str1.length; i++) { for (int j = 0; j < str2.length; j++) { if(str1[i].equals(str2[j])){ break; } if(j==str2.length-1){ if(!addList.contains(str1[i])) addList.add(str1[i].toString()); } } } String addResult[][] = new String[addList.size()][2];; for(int k=0;k<addList.size();k++){ String r = (String)addList.get(k); addResult[k][0] = r; addResult[k][1] = "-"; System.out.println(addResult[k][0]+":"+addResult[k][1]); } List<String> minList = new ArrayList<String>(); for (int i = 0; i < str2.length; i++) { for (int j = 0; j < str1.length; j++) { if(str2[i].equals(str1[j])){ break; } if(j==str1.length-1){ if(!minList.contains(str2[i])) minList.add(str2[i].toString()); } } } String minResult[][] = new String[minList.size()][2];; for(int k=0;k<minList.size();k++){ String r = (String)minList.get(k); minResult[k][0] = r; minResult[k][1] = "-"; System.out.println(minResult[k][0]+":"+minResult[k][1]); } } 刚刚有点小问题~~~~ minResult[k][1] = "-";这个应该改成minResult[k][1] = "+"; 就是楼主要求的了 blazingfire的方法是正确的非常感谢大家 散分 SSH框架中在Action中调用DAO报空指针 求《java项目开发实例自学手册》的电子书, List中的字符串处理 spring与struts问题 别人机子上的struts项目拷贝到我的机子上运行调试不了 谁有电子图书馆方面的需求分析或相关需求,高分相求。 问一句话的意思 提问关于jTable,DefaultTableModel的用法~~ 新手!J2EE+SQL SERVER 2000+TOMCAT(在线) 如何在java中得到当前工程的CLASS在计算机中的绝对路径地址! 用hibernate生成oracle映射文件出错????急~~~~~~~~ fckeditor
先用str2 中的每一个和str1中的比较 没找到 就是+的
然后反过来用str1中每一个 和str2的比较 没有的 就是-的
String[] str1 = { "2", "3", "4" };
String[] str2 = { "3", "4", "5", "6" };
String[][] d = compareStrArray(str1, str2);
for(int i = 0; i<d.length; i++){
for(int j = 0, jlen = d[i].length ; j < jlen; j++){
if(j > 0)
System.out.print(",");
System.out.print(d[i][j]);
}
System.out.println();
}
} public static String[][] compareStrArray(String[] str1, String[] str2) {
List<String[]> resultList = new ArrayList<String[]>();
List<String> list2 = new ArrayList<String>();
for (String s : str2) {
list2.add(s);
} for (String s1 : str1) {
boolean existed = false;
for (int i = list2.size() - 1; i > -1; i--) {
String s2 = list2.get(i);
if (s2.equals(s1)) {
existed = true;
list2.remove(i);
break;
}
} if (!existed) {
resultList.add(new String[] { s1, "-" });
}
} for (String s : list2) {
resultList.add(new String[] { s, "+" });
}
String[][] ret = new String[resultList.size()][];
for(int i = 0 ; i < resultList.size() ; i++){
ret[i] = resultList.get(i);;
}
return ret;
}
如果str2有可是str1没有的元素 那么就是多余 :“Y”,“+”
是这个意思吗? 我觉得这样的表述更容易理解
个人觉得楼上的想法是对的, 不过没有必要再遍历第二个数组了,遍历第一个数组 再进行比较时 用一个变量记录就好了,只要第二个数组中没有被标记的就是多余的,这样时间复杂度就低了,
个人看法 欢迎拍砖
public static void main(String[] args) {
String str1[] = {"2","3","4"};
String str2[] = {"3","4","5","6"};
List<String> addList = new ArrayList<String>();
for (int i = 0; i < str1.length; i++) {
for (int j = 0; j < str2.length; j++) {
if(str1[i].equals(str2[j])){
break;
}
if(j==str2.length-1){
if(!addList.contains(str1[i]))
addList.add(str1[i].toString());
}
}
}
String addResult[][] = new String[addList.size()][2];;
for(int k=0;k<addList.size();k++){
String r = (String)addList.get(k);
addResult[k][0] = r;
addResult[k][1] = "-";
System.out.println(addResult[k][0]+":"+addResult[k][1]);
}
List<String> minList = new ArrayList<String>();
for (int i = 0; i < str2.length; i++) {
for (int j = 0; j < str1.length; j++) {
if(str2[i].equals(str1[j])){
break;
}
if(j==str1.length-1){
if(!minList.contains(str2[i]))
minList.add(str2[i].toString());
}
}
}
String minResult[][] = new String[minList.size()][2];;
for(int k=0;k<minList.size();k++){
String r = (String)minList.get(k);
minResult[k][0] = r;
minResult[k][1] = "-";
System.out.println(minResult[k][0]+":"+minResult[k][1]);
}
}
minResult[k][1] = "-";这个应该改成minResult[k][1] = "+";
就是楼主要求的了