----------------------android培训、java培训、期待与您交流! ----------------------
在java.util.Arrays类中定义的方法有:
public static List aslist(Object [ ])
public static int binarySerrch(…)
public static Boolean equals(..)
public static void fill(…)
public static void sort(…)
这里,…表明该方法是覆盖的,对不同的参数类型有不同的方法实现,一种是对基本数据类型的,另一种针对引用类型。例如,binarySearch()方法就有9个版本,其中7个市针对基本数据类型的(除boolean类型没有外),另外两个是针对类型为Object()的数组。
应当注意到Arrays中的所有方法均是static型的,这样它们可以用前缀为Arrays的形式调用其中的方法,而不必用到类的实例名。事实上,对Arrays进行实例化是不可能的,这是因为它的构造器被声明为private型。
例1 测试Arrays类中的方法
import java.util.Arrays;
public class Testing
{
public static void main(String [] args)
{
char[] a = new char[64];
Arrays.fill(a,'H');
String s = new String(a);
System.out.println("s =\""+s +"\"");
Object[] objects = new Object[8];
Arrays.fill(objects,2,5,"Java");
System.out.println("objects ="+Arrays.asList(objects));
int [] x = {77,44,99,88,22,33,66,55};
int [] y =(int[])x.clone();
System.out.print("x = "); print(x);
System.out.print("y = "); print(y);
System.out.println("Arrays.equals(x,y) ="+Arrays.equals(x,y));
System.out.println("y.equals(x) =" +y.equals(x));
y[4] = 0;
System.out.print("y = "); print(y);
System.out.println("Arrays.equals(x,y) = "+Arrays.equals(x,y));
System.out.print("x = "); print(x);
Arrays.sort(x);
System.out.print("x = "); print(x);
int i = Arrays.binarySearch(x,44);
System.out.println("Arrays.binarySearch(x,44) = " + i);
i = Arrays.binarySearch(x,47);
System.out.println("Arrays.binarySerach(x,47) = " + i);
}
private static void print(int [] a)
{
System.out.print("(" + a[0]);
for(int i =1 ; i<a.length; i++)
System.out.print(","+a[i]);
System.out.println("}");
}
}
该程序执行后结果为:
程序中的前三行展示如何重复利用某个字符来构造一个String对象。起先,我们第一个64个字符的数组,然后利用Arrays.fill()方法来填充某个想要填充的字符,在本程序中,就是字符’H’,然后利用适当的构造器将字符串构造成一个String型对象。
随后,我们构造一个名为objects的数组,该数组有8个引用成份。利用String型对象”J ava”对该数组的成份2到4进行填充。请注意方法中的整型参数2和,5它们用于指示填充的范围:其中开始整数2,是开始填充的数组下标,而第二个整数是随后开始的不备填充的数组成份的下标。这种标明范围的方法在标准库中得到广泛使用。该表示协议得结果是范围中的成份的个数等于这两参数之差。在本程序中,5-2=3,因此,将有3个成份得到改变,它们是第2、第3和第4个。
对数组对象而言,没有toString()方法,所以不像其他的对象,它们不能直接打印输出。
但是,方法Arrays.toList()可产生一个List对象,而List对象具有toString()方法,因而可以传递给System.out.println()方法进行输出,这是打印一个数组对象的简单方式。
程序的接下部分将产生两个整型数组x和y,使用Object.clone()方法把x复制到y。然后调用Arrays.equals()方法以及O bject.equals()方法来对她们做相同检查。注意,这两个方法调用中,只有第一个返回真。然后改变y[4]中的内容,并再次调用Arrays.equals()方法,当两个数组内容不同时,该方法也能正常工作。
程序中的Arrasys.sort()方法是用于对x进行排序的,排序后,我们使用Arrays.binarySerach()方法来对数组x的特定整数进行查找,如该基元位于数组之中,查找方法将返回它在数组中的位置索引,对应于本程序而言,将返回2。反之,若不存在于数组中,将返回一个负数,以表明该成份不在本数组之中。
值得注意的是,Arrays.binarySearch()方法要求数组是事先排序的,否则将不能正常工作。
对数组而言,方法Arrays.equals()是在代替Object.equals()的意义上使用的,我们知道,对应方法Object.equals(),只有当两个引用指向同一个对象时才为真,它检验两个是否为同一对象标识而不是检查他们的内容是否相同。
为了说明有关数组的一些算法,我们定义另外的一个Arrays类,为避免名字冲突,把该类放在一个单独的名为schaums.dswj的包中,该名字正好代表Schaum的Java数据结构概览英文首字母缩写(Schaum’s Outline of Data S tructures with J ava)。
例2 一个ArraysDemo 实用类
package schaums.dswj;
import java.util.Random;
public class ArraysDemo
{
private static Random random = new Random();
public static int load(int start,int range)
{
return random.nextInt(range)+start;
}
public static void load(int [] a, int start,int range)
{
int n = a.length;
for (int i=0;i<n ;i++ )
{
a[i] = random.nextInt(range) + start;
}
}
public static void print(int[] a)
{
for (int i=0;i<a.length ;i++ )
System.out.print(" "+(i>9?"":" ")+i);
System.out.print("\n{"+a[0]);
for (int i=1;i<a.length ;i++ )
System.out.print(","+a[i]);
System.out.println(" }");
}
public static void load(double [] a, int start,int range)
{
int n=a.length;
for(int i=0;i<n;i++)
a[i] = random.nextInt(range)+start;
}
public static void print(double[] a)
{
for (int i=0;i<a.length ;i++ )
System.out.print(" "+(i>9?"":" ")+i);
System.out.print("\n{ "+a[0]);
for(int i=1;i<a.length;i++)
System.out.print(","+a[i]);
System.out.println(" }");
}
public static void load(Object[] a,int start,int range)
{
int n=a.length;
for (int i=0;i<n ;i++ )
{
int m = random.nextInt(range) + start;
if(i%3==0) a[i] = new Integer(m);
else if(i%3==1) a[i] = new Double(m);
else a[i] = "(" + m + ")";
}
}
public static void print(Object [] a)
{
for(int i=0;i<a.length;i++)
System.out.print(" "+(i>0?"":" ")+i);
System.out.print("\n{ "+a[0]);
for(int i=1;i<a.length;i++)
System.out.print(", "+a[i]);
System.out.println(" }");
}
public static void print(String label,Object[] a)
{
System.out.print(label + " = ");
for (int i=0;i<a.length;i++)
System.out.print("\n{ "+a[0]);
for(int i=1; i<a.length;i++)
System.out.print(", "+a[i]);
System.out.println(" ]");
}
public static void swap(int [] a,int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void swap(Object [] a, int i ,int j)
{
Object temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
下面的测试类中仅有3个方法调用,其中两个load( )方法用于变量及数组的初始化,在初始值得生存成中利用了随机数产生器。而print()方法用于打印整型数组。Load()方法将整型数组限制在start到(start+range-1)之间,这有利于重复数组的产生。Print( )打印出一行数组下标值,对数组元素进行注解,有利于对索引元素的单个定位。
下面测试驱动程序说明了该类是如何工作的。
import schaums.dswj.ArraysDemo;
public class Testings
{
private static final int SIZE = 16;
private static final int START =40;
private static final int RANGE =20;
private static int [] a = new int[SIZE];
public static void main(String [] args)
{
ArraysDemo.load(a,START,RANGE);
ArraysDemo.print(a);
ArraysDemo.load(a,START,RANGE);
ArraysDemo.print(a);
}
}
该程序的输出为:
上述程序两次产生有16个元素的随机数数组,元素的随机数范围为40到59,因而存在重复的元素。例如,在第一次产生的数组中,a[2]=a[10]=46就是如此。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima