什麼是數組?
同一種類型數據的集合,也就是一個容器。運算的時候有很多數據參與運算,那麼首先需要做的是什麼.不是如何運算而是如何保存這些數據以便於後期的運算,那麼數組就是一種用於存儲數據的方式,能存數據的地方我們稱之爲容器。
數組的本質:
就是去申請一串連續的內存空間,這個對象arr就指向這個這串內存單元的第一個值
數組的好處:
當我們需要求1000個學生的平均分的時候,不可能去找1000個變量賦值,這樣可以,只不過太過於麻煩,於是,引進來了數組,它能給存進來的數據進行自動編號,注意編號從零開始,方便操作這些數據。
數組的聲明大致分爲兩種:
①聲明數組的同時,指定它的長度
②聲明數組的同時,指定裏面的值
比如:
①int arr[] = new int[10];指定數組長度爲10
②int arr[] = {1,2,3,4,5}指定裏面的值
二維數組的聲明和一維數組其實都一樣,只是多了一個索引值。
①int arr[][] = new int[10][10];
②int arr[][] = {{1,2,3,4,5},{1,2,3,4,5}};
1)數組裏面存的都是同一類型數據的集合
a. 即可以是基本類型,也可以是對象類型;
b. 數組中的每個數據爲元素;
2) 數組是一個對象,成員是數組長度和數組中的元素;
3) 聲明瞭一個數組變量並不是創建了一個對象;
數組的遍歷:
我們知道拿到數組裏的值,其實就是把它的下標依次改變就行了,下標從0開始,所以,我們可以通過for循環去遍歷數組、或者foreach(也叫增強for循環)去遍歷,其遍歷的方式爲:
拿一維數組舉例:
int arr[] = {1,2,3,4,5};
(1)for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
(2)for(int i:arr){
System.out.println(i);
}
(1)for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
(2)for(int i:arr){
System.out.println(i);
}
當我們的數組中沒有值時,它們都有默認值。
下面是對應的默認值:
byte/short/int/long 0
float 0.0f
double 0.0d
String null
char '\u0000'
boolean false
放大數組:
怎麼把一個數放到一個指定長度數組裏,可是這個數組裏都有值,沒地方去存,可以先將這個數組進行放大,通過arr =Arrays.copeOf(arr,arr.length+1)此時的arr已經進行了長度+1,並最後一位有個初值0,然後可以通過fill進行填充
複製數組copyOf(arr,int newlenth)
數組查詢 binarySearch(Object[]arr,Object key)使用的前提: 數據排好序
int a = Arrays.binarySearch(arr,3);
如果存在多個值,查詢的時候會從前往後一次查找,直到找到一個這個值爲止,後面還有也不會繼續查找。
給數組從小到大進行排序
Arrays.sort(arr);
數組的排序分爲兩種:
①冒泡排序
相隔的數去做比較,大的像後冒泡,通過一直去循環,最後小的都在前面,大的在後面。
int arr[] ={7,5,6,2,4,3,1};//聲明一個數組
for (int i = 1;i<arr.length;i++){//循環數組中的所有元素
int index=0;//聲明變量用來接收較大的那個下標
for (int j = 1;j<=arr.length-i;j++){
if (arr[j] > arr[index]){//如果arr[j]大於arr[index] 進入判斷
index = j;//把j 賦值給 index
}
}
int midd = arr[index];//兩個值去交換,需要一箇中間值midd
arr[index] = arr[arr.length-i];//arr[index]就是最後一個元素
arr[arr.length-i]=midd;
}
②選擇排序
拿到第一個數依次和後面所有的值作比較,如果小於則交換位置,最後找到第一個最小值,然後再以此類推,完成排序。
int min = 0;
for(int i =0;i<arr.length;i++){
int index = i;
for(int j =i+1;j<arr.length;j++){
if(arr[index]>arr[j]){
index = j;
}
}
min = arr[index];
arr[index] = arr[i];
arr[i] = min;
}