黑马程序员____Arrays类

----------------------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”对该数组的成份24进行填充。请注意方法中的整型参数2和,5它们用于指示填充的范围:其中开始整数2,是开始填充的数组下标,而第二个整数是随后开始的不备填充的数组成份的下标。这种标明范围的方法在标准库中得到广泛使用。该表示协议得结果是范围中的成份的个数等于这两参数之差。在本程序中,5-2=3,因此,将有3个成份得到改变,它们是第2、第3和第4个。

         对数组对象而言,没有toString()方法,所以不像其他的对象,它们不能直接打印输出。

但是,方法Arrays.toList()可产生一个List对象,而List对象具有toString()方法,因而可以传递给System.out.println()方法进行输出,这是打印一个数组对象的简单方式。

         程序的接下部分将产生两个整型数组xy,使用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的包中,该名字正好代表SchaumJava数据结构概览英文首字母缩写(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个元素的随机数数组,元素的随机数范围为4059,因而存在重复的元素。例如,在第一次产生的数组中,a[2]=a[10]=46就是如此。




 

 

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值