天天看点

黑马程序员 Java基础之Arrays工具类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Arrays概述

我们都知道,数组的可用方法,比如比较大小,查找某个元素等常见方法,因此Java为我们提供了一个工具类Arrays,主要用于扩展数组的功能。

Arrays类常用的方法:

static <T> list<T> asList(T [] t)接受一个数组,返回一个长度固定的指定类型的列表。

static int binarySearch(T [] t, T key)接受一个指定类型的数组,并检查该数组是否包含该指定的元素。

static T[] copyof(T[],int length)复制指定的数组,使其副本具有指定的长度。

static  T[] copyofRange(T[],int start,int end)将数组指定的长度复制到一个新的数组。

static T[] fill(T[],int start ,int end T t)将t复制到指定范围的数组中去。

static T[] sort(T [])对指定的数组进行升序排序。

static T[] sort(T[] t,int start,int end)对数组的指定范围内进行排序。

static T[] toString(T [] ),返回指定数组的字符串表现形式。

static <T>List<T> asArray(T[] t)返回一个固定长度

Arrays实例一

import java.util.*;
class JavaCollection1_41 
{
	public static void main(String[] args) 
	{
		Integer[] arr={1,23,221,412,43,89,67};
		/*sop(Arrays.binarySearch(arr,23));
		int[] temp=Arrays.copyOf(arr,2);
		for(int i=0;i<temp.length;i++)
		{
			sop(temp[i]);
		}
		int[] arrtemp=Arrays.copyOfRange(arr,2,4);//包含头部,不包含尾部
		for(int i=0;i<arrtemp.length;i++)
		{
			sop(arrtemp[i]);
		}
		/*Arrays.fill(arr,2,4,5);
		for(int i=0;i<arr.length;i++)
		{
			sop(arr[i]);
		}
        for
		*/
		sop("**************");
		/*Arrays.sort(arr);
		for(int i=0;i<arr.length;i++)
		{
			sop(arr[i]);
		}
		*/
		/*把数组转换成集合有什么好处呢??
		可以按照集合的思想来操作数组。
		注意事项:
		因为数组的长度是一定的。所以将数组转换成集合时,集合的大小也是固定的,不能使用add,remove方法,但是其他的方法还是可以使用。
		Arrays.sort(arr,2,4);
		for(int i=0;i<arr.length;i++)
		{
			sop(arr[i]);
		}
		*/
		List<Integer>  list=Arrays.asList(arr);
		sop(list);
		sop(list.contains(23));
		//注意事项,如果数组中存储的是兑现,那么使用asList()方法转成集合时,数组中对应的对象就会变成集合中的对象。
		//如果数组中存储的是基本数据类型,那么在使用asList()方法转成集合时,数组中本身将作为一个整体变成集合中的一个对象。
		int[] nums={1,23,434,54,2};
		List<int[]> list2=Arrays.asList(nums);
		sop(list2);
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}
           

Arrays实例二:

/*集合变成数组
Collection接口中的toArray()方法。
*/
import java.util.*;
class JavaCollection1_42
{
	public static void main(String[] args) 
	{
		ArrayList<String> al=new ArrayList<String>();
		al.add("xt");
		al.add("x");
		al.add("z");
		al.add("aa");
		al.add("zf");
		//注意事项:1如果我们传入的数组的长度小于集合的size(),那么系统就会自动创建一个长度为size()的数组,并返回这个数组。
		//2如果传入的数组的长度大于集合的size(),那么系统就会使用传入的数组,而大于集合长度的地方为null.
		//所以最好的方法是我们传入的字符串数组的长度为集合的size();
		String[] arr=al.toArray(new String[1]);
		System.out.println(Arrays.toString(arr));
		//2为何要将集合转换成数组?
		//因为集合可以对其进行增删,还可以修改,但是数组的大小是一定,我们不能对其进行增删,所以这是为了限定对元素的操作。
	}
}
           

注意:集合转换陈数组是使用Collections工具类中的ToArray方法, 数组转换成集合是使用Arrays工具类中的asList()方法。

高级for循环

凡是支持迭代的集合都可以支持高级for循环

传统for循环和高级for循环的区别?

1高级for循环必须有被遍历的目标,建议在遍历数组的时候,使用传统的for,因为传统的for可以定义角标。另外高级for循环不能够只能够查看,而且不能对数组或者集合进行操作。

高级for循环的语法格式:

for(集合类型  变量名 :能够遍历的集合和数组)

高级for循环实例

import java.util.*;
class JavaCollection1_43 
{
	public static void main(String[] args) 
	{
		ArrayList<String> al=new ArrayList<String>();
		al.add("afd");
		al.add("efg");
		al.add("acd");
		al.add("a");
		//注意这里的s就相当于是一个指针,开始指向afd,然后每遍历一次,指针便向后移动一格,而我们在s="fff"只是修改了s的引用,并没有修改al中的值。所以打印数组的结果不会变。
		//高级for循环遍历ArrayList集合。
		for(String s: al)
		{
			s="fff";
			//System.out.println(s);
		}
		System.out.println(al);
		//高级for循环遍历数组
		int[] arr={1,23,321,434,312};
		for(int i : arr)
		{
			System.out.println(i);
		}
		System.out.println("**************");
		HashMap<Integer,String> hm=new HashMap<Integer,String>();
		hm.put(1,"2");
		hm.put(2,"3");
		hm.put(3,"4");
		Set<Integer> keyset=hm.keySet();
		for(Integer i :keyset)
		{
			System.out.println(i+"-"+hm.get(i));
		}
		System.out.println("**************");
		for(Map.Entry<Integer,String> me :hm.entrySet())
		{
			System.out.println(me.getKey()+"-"+me.getValue());
		}
	}
}
           

导入静态包

在写代码时,往往需要多次调用工具类中的方法,这样就显得很麻烦,而为了解决这种问题,我们就采用导入静态方法包的方法来简化代码的书写。

示例如下:

import static java.util.Arrays.*;
import java.util.*;
class JavaCollection1_45 
{
	public static void main(String[] args) 
	{
		Integer[] arr={23,21,22,43,5};
		//由于我们导入了静态工具类,那么我们这里就可以直接使用Arrays的asList()方法,而不需要写全称。
		List<Integer> al=asList(arr);
		/*System.out.println(toSting(arr));注意这里我们不能直接使用toString()方法,因为这里jvm会默认以为是Object的方法,而不是Arrays的toString(),所以这里我们使用方法的时候,必须带上包名。*/
		for(Integer i :al)
		{
			System.out.println(i);
		}
	}
}
           

继续阅读