一、一維數組
一維數組初始化
數據類型[] 數組名=new 數據類型[數組長度]//動態初始化
數據類型[] 數組名=new 數據類型[]{值}//靜態初始化
數據類型[] 數組名={值}
數組長度一旦確定,就不可更改。
數組是序排序;
數組屬于引用數據類型的變量,數組的元素可以是任意數據類型;
一維數組引用:數組名[索引/下標]
獲取數組長度:數組名.length
如何遍歷數組:
for (int i = 0; i < 數組名.length; i++) {System.out.println(數組名[i]);}
不同類型的一維數組默認初始化值:
整型:0
浮點型:0.0
char:0或'\u0000',而非'0'
boolean:false
引用類型:null
二、二維數組
二維數組初始化
數據類型[][]數組名=new 數據類型[一維數組的個數][一維數組的長度]//動態初始化 數據類型[][]數組名=new 數據類型[一維數組的個數][]//動態初始化 數據類型[][]數組名=new 數據類型[][]{{},{},{}……,{}}//靜態初始化
獲取數組長度:
數組名.length
數組名[索引].length
如何遍歷數組:
public static void main(String[] args) {// TODO Auto-generated method stubint[][] arr = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.println(arr[i][j] + "\t");}System.out.println();}}
二維數組默認初始化值:
方式一:
public static void main(String[] args) {// TODO Auto-generated method stub//二維數組使用,二維數組分為外層,內層元素int[][] arr = new int[4][3];//arr[0]外層//arr[0][0]內層//默認初始化值System.out.println(arr[0]);//[I@4e50df2eSystem.out.println(arr[0][0]);//0System.out.println(arr);//[[I@1d81eb93}
外層元素初始化值為:地址值
內層元素初始化值為:與一維數組初始化情況相同
方式二:
public static void main(String[] args) {// TODO Auto-generated method stubint[][] arr = new int[4][];System.out.println(arr[0]);//null}
外層元素初始化值為:null
內層元素初始化值為:不能調用,會報錯
三、數據結構
1、數據與數據之間的邏輯關系:集合,一對一,一對多,多對多;
2、數據的存儲結構:
線性表:順序表(數組)、鏈表、棧、隊列;
樹形結構:二叉樹
圖形結構
算法:排序算法,搜索算法
四、數組算法
10行的楊輝三角
public static void main(String[] args) {// TODO Auto-generated method stubint[][] arr = new int[10][];for (int i = 0; i < arr.length; i++) {arr[i] = new int[i + 1];arr[i][0] = arr[i][i] = 1;for (int j = 1; j < arr[i].length - 1; j++) {arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}}for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + "\t");}System.out.println();}}
數組的復制、反轉、遍歷
int[] array1=new int[]{1,2,3,4}; //數組的復制,區別于數組變量的賦值:array1=array2 int[] array2=new int[array1.length]; for(int i=0;i<array1.length;i++){ array2[i]=array1[i]; } //數組反轉 for(int i=0;i<array1.length/2;i++){ int temp =array1[i]; array1[i]=array1[array1.length-i-1]; array1[array1.length-i-1]=temp; } //遍歷 for(int i=0;i<array1.length;i++){ System.out.println(array1[i]+"\t"); }
查找(線性查找、二分法查找)
//線性查找int num=4;boolean flag=true;for(int i=0;i<array1.length;i++) {if(num==array1[i]) {System.out.println("找到指定元素,位置為,"+i);flag=false;break;}}if(flag) {System.out.println("很遺憾,沒有找到");}//二分法查找:前提:所要查找的數組必須有序int[] arr=new int[]{12,43,2,-1,8,7,66,45};int n=-1;int head=0;//初始首索引int end=arr.length-1;//初始尾索引boolean flag1=true;while(head<=end) {int middle=(head+end)/2;if(n==arr[middle]) {System.out.println("找到指定元素,位置為,"+middle);flag1=false;break;}else if(arr[middle]>n) {end=middle-1;}else {head=middle+1;}}if(flag1) {System.out.println("很遺憾,沒有找到");}
排序算法
衡量排序算法優劣:
時間復雜度、空間復雜度、穩定性
排序:選擇排序、交換排序(冒泡排序,快速排序)、插入排序(直接插入、折半插入)、歸并排序、桶式排序、基數排序
算法5大特性:輸入、輸出、有窮性、確定性、可行性
冒泡排序:
int[] arr= new int[]{2,4,3,5,1}; for(int i=0;i<arr.length-1;i++) {for(int j=0;j<arr.length-1-i;j++) {if(arr[j]>arr[j+1]) {int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}} } for(int i=0;i<arr.length;i++) {System.out.println(arr[i]); }
從平均時間來看:快速排序最佳
Arrays工具類使用
java.util.Arrays:操作數組的工具類,里面定義了很多操作數組的方法。
Arrays.equals(int[] a,int[] b):判斷兩個數組是否相等
Arrays.toString(int[] a):輸出數組信息
Arrays.fill(int[] a,int val):將指定值填充到數組中
Arrays.sort(int[] a):對數組進行排序
常見異常:
數組角標越界異常:ArrayIndexOutOfBoundsException
空指針異常:NullPointerException