數組: 是一個容器,數組本身是引用類型.
特點:
1 元素類型相同.
2 數組長度固定.長度不能改變.
3 數組中的元素是有順序的.它裝入的順序和取出順序一致,因爲有角標.
數組兩種初始化方式:
1.默認初始化:
格式: 元素類型[] 數組名=new 元素類型[長度];
int[] arr = new int[5];
2.靜態初始化:
格式 : 元素類型[] 數組名={元素1,元素2,元素3,...}或
元素類型[] 數組名=new 元素類型[]{元素1,元素2,元素3,...};
int a[] ={1,2,3,4};
int[] a=new int[]{3,4,5};
int a[5];//聲明數組時,不能指定其長度,編譯時將出錯
常見操作:交換位置,獲取最大,最小值,選擇排序,冒泡排序,反轉,折半查找,進制轉換等.
//無論什麼排序。都需要對滿足條件的元素進行位置置換。所以可以把這部分相同的代碼提取出來,單獨封裝成一個函數。
private static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//獲取最大值
public static int getMax(int[] arr)
{
int max = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
//獲取最小值
public static int getMin(int[] arr)
{
int min = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]<arr[min])
min = x;
}
return arr[min];
}
/*選擇排序:用數組中某個位置元素與其後所有元素進行比較,最值出現在當前這個元素的位置然後用其後的元素與其它的元素進行比較,依此類推。最值出現在數組的左邊*/
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1 ; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
/*
冒泡排序:相鄰兩個元素進行比較。如果滿足條件就進行位置置換,內循環結束一次,最值出現在尾下標位置。
*/
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-x-1; y++)//-x:讓每一次比較的元素減少,-1:避免角標越界。
{
if(arr[y]<arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
//對指定數組進行反轉,原理就是前後元素交換
public static void reverseArray(int[] arr)
{
for(int start=0,end=arr.length-1; start<end ; start++,end--)
{
swap(arr,start,end);
}
}
//折半查找;前提保證數組是有序的
public static int halfSearch(int [] arr,intkey){
int min,mid,max;
min = 0;
max = arr.length-1;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
{
min = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}else{
return mid;
}
}
return -1;
}
//查表法進制轉換
//十進制轉二進制
public static String toBinary(int a) {
return trans(a, 1, 1);
}
//十進制轉八進制
public static String toOctal(int a) {
return trans(a, 7, 3);
}
//十進制轉十六進制
public static String toHex(int a) {
return trans(a, 15, 4);
}
public static String trans(int num,int base,int offset)
{
if(num==0)
return 0;
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while(num!=0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
return new String(arr, 0, pos);
}
對於數組的排序,jdk已有功能定義:Arrays.sort();
對於數組的折半查找,jdk已有功能定義:Arrays.binarySearch();
對於進制轉換,jdk已有功能定義:Integer.toBinaryString();Integer.toHexString();Integer.toOctalString();
多維數組:
java 中並沒有真正的多維數組,所謂多維數組,只不過是數組的數組
二維數組:
1.元素類型[][] 數組名=new 元素類型[長度][];
2.元素類型 數組名[][] =new 元素類型[長度][];
3.元素類型 []數組名[] =new 元素類型[長度][];
int[][] xx = new int[3][];
xx[0]=new int[3];
xx[1]=new int[2];
一維數組初始化方式:
int[] x;
int x[];
二維數組初始化方式:
int[][] y;
int y[][];
int[] y[];
int[] x,y[];//x是一維數組,y是二維數組。