java數組整理

題記:

對於java數組的整理,使調理化。個人理解是數組是一個存儲數據容器,優點是內存大小可控,這也恰恰是它缺點,容器容量是不變的。解決這問題便是集合。好久好久不用了,有種莫名的感覺……

一、初始化:(定義,分配空間,賦值這三步;注意堆與棧之間的關係,定義---棧,賦值---堆)

1.動態初始化:數組定義與爲數組分配空間和賦值的操作分開進行;

2.靜態初始化:在定義數字的同時就爲數組元素分配空間並賦值;

3.默認初始化:數組是引用類型,它的元素相當於類的成員變量,因此數組分配空間後,每個元素也被按照成員變量的規則被隱士初始化。

參考:http://developer.51cto.com/art/200906/128274.htm

二、二維數組

對二維複合數據類型的數組,必須首先爲最高維分配引用空間,然後再順次爲低維分配空間。而且,必須爲每個數組元素單獨分配空間。

例如:

int a[][] = new int[2][];
		//a[0] = 1; //錯誤
		a[0] = new int[2];//分配堆空間
			a[0][0] = 1;//真實存值
			a[0][1] = 2;
		a[1] = new int[2];
			a[1][0] = 21;
			a[1][1] = 22;
多維數組在二維數組基礎上迭代

理解:

一維數組是一行隊列

二維數組是多行隊列

三、工具類

java.util.Arrays類能方便地操作數組,它提供的所有方法都是靜態的。具有以下功能:(增刪改查,多了排序,比較相等

1.給數組賦值:通過fill方法。

2.對數組排序:通過sort方法,升序。(據說是一種優化了算法,反正看源碼看的頭疼……)

3.比較數組:通過equals方法/hashCode方法比較數組中元素值是否相等。

4.查找數組元素:通過binarySearch方法能對排序好的數組進行二分查找法操作

例如:

int[] array = new int[5];

//填充數組

Arrays.fill(array, 5);

System.out.println("填充數組:Arrays.fill(array, 5):");

TestArrays.output(array);

 

//將數組的第2和第3個元素賦值爲8,必須的連續

Arrays.fill(array, 2, 4, 8);

System.out.println("將數組的第2和第3個元素賦值爲8:Arrays.fill(array, 2, 4, 8):");

TestArrays.output(array);

 

int[] array1 = {7,8,3,2,12,6,3,5,4};

//對數組的第2個到第6個進行排序進行排序

Arrays.sort(array1,2,7);

System.out.println("對數組的第2個到第6個元素進行排序進行排序:Arrays.sort(array,2,7):");

TestArrays.output(array1);

 

//對整個數組進行排序

Arrays.sort(array1);

System.out.println("對整個數組進行排序:Arrays.sort(array1):");

TestArrays.output(array1);

 

//比較數組元素是否相等

System.out.println("比較數組元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));

int[] array2 = array1.clone();

System.out.println("克隆後數組元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));

 

//使用二分搜索算法查找指定元素所在的下標(必須是排序好的,否則結果不正確)

Arrays.sort(array1);

System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));

//如果不存在就返回負數

System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));

}





細節:

1.java中 數組a  = 數組b  中僅僅是地址的傳遞,而不是值的複製

import org.junit.Test;

public class ArrayTest {
	
	@Test
	public void add()
	{
		int[] a = new int[5];
		System.out.println(a);
		for(int i=0; i<5; i++)
		{
			System.out.print("第" + i + "=" + a[i]+"; ");
		}
		int[] b = {1,2,3,4,5};
		a = b;//把b賦值給a
		System.out.println(a);
		for(int i=0; i<5; i++)
		{
			System.out.print("第" + i +  "=" + a[i]+"; ");
		}
		a[4]=10;//改變a中元素
		for(int i=0; i<5; i++)
		{
			System.out.print("第b" + i +  "=" + b[i]+"; ");
			//返回中b中的元素也改變了,說明是b給a之是傳遞了地址
			//而值存在堆中,a,b共用一個堆
		}
		
	}

}







發佈了34 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章