这次我们来讲讲Arrays工具类,这个工具类在java.util包下,这个工具类包括了许多对数组进行操作的方法,比如对数组排序和查找。还包括了一个静态工厂,能让数组作为List(列表)来访问。
接下来详细讲讲这个工具类的所有公共方法。
public static void sort(long[] a) 这个方法会将一个long类型数组进行排序,java原码中有说明,这个排序是用快速排序算法实现的。
示例代码
long[] a={1,3,2,4,6,8,7};
System.out.println("排序前:");
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
Arrays.sort(a);
System.out.println("排序后:");
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
运行结果
排序前:
1
3
2
4
6
8
7
排序后:
1
2
3
4
6
7
8
public static void sort(long[] a, int fromIndex, int toIndex)
a 被排序的数组
fromIndex 需要排序的起始位置,包括fromIndex这个位置的元素。
toIndex需要排序的结束位置,不包括toIndex这个位置的元素。
这个方法会把给定的long 类型数组按指定的排序起始位置的结束位置来排序。
示例代码
long[] a={6,3,2,4,1,5,8,7};
System.out.println("排序前:");
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
Arrays.sort(a,0,4);//从0开始到4(不包括4)
System.out.println("排序后:");
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
运行结果
排序前:
6
3
2
4
1
5
8
7
排序后:
2
3
4
6
1
5
8
7
public static int binarySearch(long[] a, long key)
a:指定数组
key:要查找的元素
返回这个元素所在的索引位置
给定一个long类型数组,一个要查找的元素,此方法实现会返回该元素的的索引位置。当查找的元素不存在时返回“-1”。需要注意的是,这个给定的long类型数组必须是经过排序的,不然会返回不确定的结果!
示例代码
long[] a={6,3,2,4,1,5,8,7};
Arrays.sort(a);
System.out.println("排序后:");
for(int i=0;i<a.length;i++)
{
System.out.print(" "+a[i]);
}
System.out.println(" ");
System.out.println("1的索引位置为:"+Arrays.binarySearch(a, 1));
运行结果
排序后:
1 2 3 4 5 6 7 8
1 的索引位置为:0
public static String deepToString(Object[] a)
a:Object类型数组
结果打印出这个素组中的所有元素,及元素的子元素!
示列代码
long[] a={6,3,2,4,1,5,8,7};
Object[] b={1,2,3,a};
System.out.println("调用deepToString方法后的结果为:"+Arrays.deepToString(b));
运行结果
调用deepToString方法后的结果为:[1, 2, 3, [6, 3, 2, 4, 1, 5, 8, 7]]
public static void fill(long[] a, int fromIndex, int toIndex, long val)
a:Long类型数组
fromIndex:填充起始位置
toIndex:填充结束位置(不包括这个位置的元素)
val:用来填充的数值
该方法根会将指定的数组从fromIndex开始到toIndex(不包括这个位置)的所有元素用val填充,当fromIndex=toIndex时,此操作并无意义,当fromIndex>toIndex时抛异常。
示例代码
long[] a={6,3,2,4,1,5,8,7};
Arrays.fill(a,0,3,1 );
System.out.println("调用fill方法后的结果为:");
for(int i=0;i<a.length;i++)
{
System.out.print(" "+a[i]);
}
运行结果
调用fill方法后的结果为:
1 1 1 4 1 5 8 7
其实public static void fill(long[] a, int fromIndex, int toIndex, long val) 方法是public static void fill(long[] a, long val) 的重载方法,而public static void fill(long[] a, long val) 这个方法很明显,是将指定的数组的所有元素都用val填充,示例就省略不写啦!
public static boolean deepEquals(Object[] a1, Object[] a2)
该方法可对将两个Object类型数组作深度比较,即只有a2和a2所有的元素和元素的子元素全部相等时,才会反回true。
示例代码
long[] a={6,3,2,4,1,5,8,7};
long[] b={6,3,2,4,1,5,8,7};
long[] c={0,3,2,4,1,5,8,7};
Object[] e={1,2,3,a};
Object[] f={1,2,3,b};
Object[] g={1,2,3,c};
System.out.println(Arrays.deepEquals(e, f));
System.out.println(Arrays.deepEquals(f, g));
运行结果
true
false
Arrays类提供了其它基本类型以上所有的方法的实现,这里就不一一赘述了!!
我的网店,有劳各位参观参观 http://mrs-x.taobao.com/