在项目中经常用到判断两个数组经常相等,或者是判断数组内容是否相同(即排序后再判断是否相等)。想封装个方法方便日后使用。自己在这写了下,技术有限。大家看看还有什么地方可以改进,大家共同进步,呵呵。
代码如下
package test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Tool {
/**
* 判断两个数组是否相等
*
*@param a
*@param b
*@return
*/
public boolean arrayIsEqual(String[] a, String[] b) {
if(a!=null&&b!=null){
if (a.length != b.length) {
return false;
} else {
for (int i = 0; i < a.length; i++) {
if(a[i]==null){
if(b[i]!=null){
return false;
}
}else{
if (!a[i].equals(b[i])) {
return false;
}
}
}
}
return true;
}else {
if(a==null&&b==null){
return true;
}else{
return false;
}
}
}
/**
* 判断两个数组内容是否相同
*
*@param a
*@param b
*@return
*/
public boolean arraySortedIsEqual(String[] a, String[] b) {
if(a!=null&&b!=null){
List<String> tmpA=Arrays.asList(a);
List<String> tmpB=Arrays.asList(b);
Collections.sort(tmpA, new ComparatorString());
Collections.sort(tmpB, new ComparatorString());
return this.arrayIsEqual(tmpA.toArray(new String[tmpA.size()]), tmpB.toArray(new String[tmpB.size()]));
}else if(a==null&&b==null){
return true;
}else{
return false;
}
}
class ComparatorString implements Comparator<Object>{
@Override
public int compare(Object o1, Object o2) {
if(o1==null&&o2==null){
return 0;
}else if(o1!=null&&o2!=null){
String s1=(String)o1;;
String s2=(String)o2;
if(s1.compareTo(s2)>0){
return 1;
}else{
return 0;
}
}else{
if(o1==null){
return 0;
}else{
return 1;
}
}
}
}
public static void main(String[] args) {
Tool tool= new Tool();
String[] a = { "111", null, "444", "333" };
String[] b = { "111", "444", "333" ,null};
String[] c = { "111", "222", "444", "333" };
System.out.println(tool.arrayIsEqual(a, b));
System.out.println(tool.arrayIsEqual(a, c));
System.out.println(tool.arraySortedIsEqual(a, b));
}
}
希望大家能提修改意见。