1.equals
/***
* 先判断a和a2是否为统一个变量,再判断非空、长度,再挨个比较。
* char[] byte[] long[] short[] 都是这样比较的
* Object[] 利用 o1.equals(o2)
* float[]利用 (Float.floatToIntBits(a[i])!=Float.floatToIntBits(a2[i])
* 各自将小数生成一个int型的数字,然后比较。这个我很奇怪为什么不直接用==比较,直接比较也可以出结果??
* double[]利用 (Double.doubleToLongBits(a[i])!=Double.doubleToLongBits(a2[i]))
* 将小数装便成long型数字比较,同样奇怪??
*
*/
public static boolean equals(int[] a, int[] a2){
if (a==a2)
return true;
if (a==null || a2==null)
return false;
int length = a.length;
if (a2.length != length)
return false;
for (int i=0; i<length; i++)
if (a[i] != a2[i])
return false;
return true;
}
2.fill
/**
* 先检查a的长度,起点和终点越界的问题。有问题报错。
* 遍历复制
* boolean,double,float,Object,byte,char,short,long 都一模一样
*/
public static void fill(long[] a, int fromIndex, int toIndex, long val) {
rangeCheck(a.length, fromIndex, toIndex);
for (int i=fromIndex; i<toIndex; i++)
a[i] = val;
}
private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
if (fromIndex > toIndex)
throw new IllegalArgumentException("fromIndex(" + fromIndex +
") > toIndex(" + toIndex+")");
if (fromIndex < 0)
throw new ArrayIndexOutOfBoundsException(fromIndex);
if (toIndex > arrayLen)
throw new ArrayIndexOutOfBoundsException(toIndex);
}
3.copyOf
/**
* 先新建一个newLength的数组,再利用 System.arraycopy复制,
* 复制的位置从0到Math.min(original.length, newLength)
* byte,short,long,char,float,double,boolean
*/
public static byte[] copyOf(byte[] original, int newLength) {
byte[] copy = new byte[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
4.sort()
看了一会没看懂,网上说:int,float等原型数据的数组采用快速排序,对Object对象数组采用归并排序 。所以等到时总结排序的时候一起理解一下。