JAVA學習——數組
---------------------- android培訓、java培訓、期待與您交流! ----------------------數組是用來存儲同一類型數據的集合,她其實是一個容器。與其他容器相比她自動給包含其中的元素從0開始編號。
一、數組的內存結構
計算機中的內存分爲“棧”和“堆”。“棧”中存儲的是基本數據類型變量和變量的引用,當“棧”中的變量和引用超出自身的作用域時會自動被清理出“棧”。“堆”用於存放JAVA中所有的對象,當對象不再被使用時就會被“堆”認爲是“垃圾”,產生的“垃圾”會被JAVA具有的垃圾回收機制所回收。
數組的定義格式:1、元素類型 [] =new 元素類型[元素個數];2、元素類型 [] = new 元素類型[]{元素,元素·····};例如:int [] arr = new int [5];該條語句的意思是指定義了一個容納5個int 類型元素的數組,其中arr爲數組名,它是一個數組類型的引用變量,它的值爲對應定義的數組在“堆”中的首地址。由於“堆”中的元素具有默認值所以該條語句定義的數組所包含的所有元素默認值爲int類型的默認值0。定義的數組在編譯期間不分配內存空間,只有在運行期間才分配內存空間。
下面是我做的一個實例來說明上圖
public class ArrayTest {
public static void main(String[] args){
int[] arr = new int[5];
int[] arr_1 = arr;
int[] arr_2 = new int[5];
System.out.println("arr:");
for (int i = 0; i < arr.length; i++) {
arr[i]=i;
}
printArray(arr);
System.out.println("arr_1:");
printArray(arr_1);
System.out.println("arr_2:");
printArray(arr_2);
}
public static void printArray(int []arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i!=arr.length-1) {
System.out.print(arr[i]+",");
}else {
System.out.println(arr[i]+"]");
}
}
}
}
運行結果:
arr:
[0,1,2,3,4]
arr_1:
[0,1,2,3,4]
arr_2:
[0,0,0,0,0]
二、獲取數組中最值
方法一:
int max=arr[0];
for(int i=0;i<arr.length;i++){
if(max<arr[i])
max=arr[i];
}
return max;
}
int getMin(int [] arr){
int min=arr[0];
for(int i=0;i<arr.length;i++){
if(min>arr[i])
min=arr[i];
}
Return min;
}
方法二:
int getMax(int [] arr){
int max=0;
for(int i=0;i<arr.length;i++){
if(arr[max]<arr[i])
max=i;
}
return arr [max];
}
int getMin(int [] arr){
int min=0;
for(int i=0;i<arr.length;i++){
if(arr[min]>arr[i])
min=i;
}
return arr [min];
}
三、數組的排序
1、 選擇排序:其特點是經過一次循環比較,最值總是出現在排頭。
public static void sort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i]<arr[j]) {
int temp = arr[i];
arr[i] =arr[j];
arr[j] = temp;
}
}
}
2、 冒泡排序
原理圖
void sort_buble(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {//減去x是是每次循環減少一個比較元素,-1爲了避免越界
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]= arr[j+1];
arr[j+1]= temp;
}
}
}
四、數組查找
折半查找程序段:折半查找的前提是數組有序
* 折半查找:
* 參數列表:arr:數組名;value:需要查找的值
* 返回值:-1代表沒有找到對應的value;返回值>0代表查找到對應value並且返回值爲在數組中的對應角標
*/
int halfsearch(int[]arr,int value){
int min,mid,max;
min= 0;
max= arr.length;
mid= (min+max)/2;
while (arr[mid]!=value) {
if (value>arr[mid]) {
min= mid+1;
}else if (value<arr[mid]) {
max= mid-1;
}
if (min>max) {
return -1;
}
mid= (min+max)/2;
}
return mid;
}
思考題:有一個有序數組,想要將一個元素插入到該數組,還要保證數組有序,如何獲取該元素在數組中應該插入的位置?
/*
* 參數列表:arr:數組名;value:需要查找的值
* 返回值:-1代表沒有找到對應的value;返回值>0代表查找到對應value並且返回值爲在數組中的對應角標
*/
int halfsearch(int[]arr,int value){
int min,mid,max;
min= 0;
max= arr.length;
while (min<=max) {
mid = (min+max)/2;
if (value>arr[mid]) {
min= mid+1;
}else if (value<arr[mid]) {
max= mid-1;
}
else
return mid;
}
return min;
}
---------------------- android培訓、java培訓、期待與您交流! ----------------------