天天看點

黑馬程式員 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);
		}
	}
}
           

繼續閱讀