请教关于List的简单问题 请问如何比较两个List中的值是否相同? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果不考虑顺序先判断size相同与否再通过containsAll来判断不过效率不高,containsAll相当于自己遍历一边。如果数据量不是很大无所谓,否则可以考虑用map表来判断。 if(list1.equals(list2)){ system.out.println("相同");} 注:xuxiaosz的方法是考虑顺序的,也就是说不但包含的值相同,而且值的顺序也相同 按我2楼的说法就不考虑顺序这种方法写起来最方便list1,list2if(list1.size()!=list2.size()){ return false;}return list1.containsAll(list2);这样相当于n*n的对比,还是比较慢的快点用mapif(list1.size()!=list2.size()){ return false;}HashMap map=new HashMap();for(int i=0;i<list1.size();i++){ map.put(list1.get(i),Boolean.False);}for(int i=0;i<list2.size();i++){ Object temp=list2.get(i); if(!map.contains(temp){ return false; } if(map.get(temp).booleanValue){ return false; }else{ map.put(temp,Boolean.True); }}return true;以上方法效率高,但占用空间多一点,而且只针对非String这类Object我没有再编译器上测试过,大概意思明白就好 if(list1.size()==list2.size){ if(list1.contains(list2)) { system.out.println("相同"); }} 以下代码适合对容器对象进行内部元素的比较。比较是递归的。如果不需要递归这样的方式,可以参考 commons-lang 中的 ListUtils 类,那里提供了比较的方法。--------------------------------------/** * 对容器类对象的内容进行比较的类 * * @author yidinghe */public class CompareUtil { private static Object[] getKeys(Map map) { Object[] keys = new Object[map.size()]; return map.keySet().toArray(keys); } /** * 比较可能为空对象 * * @param obj1 要比较的对象 * @param obj2 要比较的对象 * * @return 如果两个对象全都是 null 或者全都不是 null,则返回 true */ private static boolean compareNull(Object obj1, Object obj2) { return (obj1 == null && obj2 == null) || (obj1 != null && obj2 != null); } /** * 对对象进行比较。本方法针对容器对象会作深层次的比较, * 如果两个容器对象内的元素都相等,那么两个容器对象被认为是相等的。 * 如果容器对象内的元素同样为容器对象,也会做这样的比较。 * * <p style="color:red"> * 注意!如果容器对象之间存在循环包含,则本函数会抛出 StackOverflowError! * </p> * * 目前支持的容器对象有:List、Map、数组。 * * @param obj1 要比较的对象 * @param obj2 要比较的对象 * * @return 如果两个对象相等,则返回 true。 */ public static boolean compareObject(Object obj1, Object obj2) { if (obj1 == null && obj2 == null) { return true; } else if (obj1 == null || obj2 == null) { return false; } if (obj1 instanceof Map && obj2 instanceof Map) { return compareMap((Map) obj1, (Map) obj2); } else if (obj1 instanceof List && obj2 instanceof List) { return compareList((List) obj1, (List) obj2); } else if (obj1.getClass().isArray() && obj2.getClass().isArray()) { return compareArray((Object[]) obj1, (Object[]) obj2); } return obj1.equals(obj2); } public static boolean compareArray(Object[] arr1, Object[] arr2) { if (!compareNull(arr1, arr2)) { return false; } if (arr1 == null || arr2 == null) { return true; } if (arr1.length != arr2.length) { return false; } for (int i = 0; i < arr1.length; i++) { if (!compareObject(arr1[i], arr2[i])) { return false; } } return true; } /** * 比较 List 对象 * * @param list1 要比较的对象 * @param list2 要比较的对象 * * @return 如果两个对象包含的元素相等,则返回 true */ public static boolean compareList(List list1, List list2) { if (!compareNull(list1, list2)) { return false; } if (list1 == null || list2 == null) { return true; } if (list1.size() != list2.size()) { return false; } for (int i = 0; i < list1.size(); i++) { if (!compareObject(list1.get(i), list2.get(i))) { System.out.println(); return false; } } return true; } /** * 比较 Map 对象 * * @param map1 要比较的对象 * @param map2 要比较的对象 * * @return 如果两个对象包含的值相等,则返回 true */ public static boolean compareMap(Map map1, Map map2) { if (!compareNull(map1, map2)) { return false; } if (map1 == null || map2 == null) { return true; } if (map1.size() != map2.size()) { return false; } Object[] keys = getKeys(map1); for (int i = 0; i < keys.length; i++) { if (!compareObject(map1.get(keys[i]), map2.get(keys[i]))) { return false; } } return true; }} For语句出现的问题,求指点,谢谢 做jsp web开发工作考什么证好 求教-泛化Class对象在容器中的存贮问题 gb2312中的英文字母占几个字节? Swing中Jtable的點擊問題 JAVA2图形设计卷I, II java的panel里面可以插入动态的图片吗,或者flash 我怎么样读取Jar包里面的文件! JBuild 6.0 中的main class 问题 谁有java的好的电子教程或好的学习网站。 请举例Java判断ini文件的方法 如何用Java生成指定像素的BMP?
先判断size相同与否
再通过containsAll来判断不过效率不高,containsAll相当于自己遍历一边。如果数据量不是很大无所谓,否则可以考虑用map表来判断。
{
system.out.println("相同");
}
xuxiaosz的方法是考虑顺序的,也就是说不但包含的值相同,而且值的顺序也相同
这种方法写起来最方便
list1,list2if(list1.size()!=list2.size()){
return false;
}
return list1.containsAll(list2);
这样相当于n*n的对比,还是比较慢的
快点用map
if(list1.size()!=list2.size()){
return false;
}
HashMap map=new HashMap();
for(int i=0;i<list1.size();i++){
map.put(list1.get(i),Boolean.False);
}
for(int i=0;i<list2.size();i++){
Object temp=list2.get(i);
if(!map.contains(temp){
return false;
}
if(map.get(temp).booleanValue){
return false;
}else{
map.put(temp,Boolean.True);
}
}
return true;以上方法效率高,但占用空间多一点,而且只针对非String这类Object
我没有再编译器上测试过,大概意思明白就好
{
if(list1.contains(list2))
{
system.out.println("相同"); }}
/**
* 对容器类对象的内容进行比较的类
*
* @author yidinghe
*/
public class CompareUtil { private static Object[] getKeys(Map map) {
Object[] keys = new Object[map.size()];
return map.keySet().toArray(keys);
} /**
* 比较可能为空对象
*
* @param obj1 要比较的对象
* @param obj2 要比较的对象
*
* @return 如果两个对象全都是 null 或者全都不是 null,则返回 true
*/
private static boolean compareNull(Object obj1, Object obj2) {
return (obj1 == null && obj2 == null) || (obj1 != null && obj2 != null);
} /**
* 对对象进行比较。本方法针对容器对象会作深层次的比较,
* 如果两个容器对象内的元素都相等,那么两个容器对象被认为是相等的。
* 如果容器对象内的元素同样为容器对象,也会做这样的比较。
*
* <p style="color:red">
* 注意!如果容器对象之间存在循环包含,则本函数会抛出 StackOverflowError!
* </p>
*
* 目前支持的容器对象有:List、Map、数组。
*
* @param obj1 要比较的对象
* @param obj2 要比较的对象
*
* @return 如果两个对象相等,则返回 true。
*/
public static boolean compareObject(Object obj1, Object obj2) {
if (obj1 == null && obj2 == null) {
return true;
} else if (obj1 == null || obj2 == null) {
return false;
} if (obj1 instanceof Map && obj2 instanceof Map) {
return compareMap((Map) obj1, (Map) obj2);
} else if (obj1 instanceof List && obj2 instanceof List) {
return compareList((List) obj1, (List) obj2);
} else if (obj1.getClass().isArray() && obj2.getClass().isArray()) {
return compareArray((Object[]) obj1, (Object[]) obj2);
} return obj1.equals(obj2);
} public static boolean compareArray(Object[] arr1, Object[] arr2) {
if (!compareNull(arr1, arr2)) {
return false;
} if (arr1 == null || arr2 == null) {
return true;
} if (arr1.length != arr2.length) {
return false;
} for (int i = 0; i < arr1.length; i++) {
if (!compareObject(arr1[i], arr2[i])) {
return false;
}
}
return true;
} /**
* 比较 List 对象
*
* @param list1 要比较的对象
* @param list2 要比较的对象
*
* @return 如果两个对象包含的元素相等,则返回 true
*/
public static boolean compareList(List list1, List list2) {
if (!compareNull(list1, list2)) {
return false;
} if (list1 == null || list2 == null) {
return true;
} if (list1.size() != list2.size()) {
return false;
} for (int i = 0; i < list1.size(); i++) {
if (!compareObject(list1.get(i), list2.get(i))) {
System.out.println();
return false;
}
} return true;
} /**
* 比较 Map 对象
*
* @param map1 要比较的对象
* @param map2 要比较的对象
*
* @return 如果两个对象包含的值相等,则返回 true
*/
public static boolean compareMap(Map map1, Map map2) {
if (!compareNull(map1, map2)) {
return false;
} if (map1 == null || map2 == null) {
return true;
} if (map1.size() != map2.size()) {
return false;
} Object[] keys = getKeys(map1);
for (int i = 0; i < keys.length; i++) {
if (!compareObject(map1.get(keys[i]), map2.get(keys[i]))) {
return false;
}
} return true;
}}