黑马程序员-----Java基础-----数组!

来源:互联网 发布:健步走计步器软件 编辑:程序博客网 时间:2024/05/21 06:59

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一,数组:
    数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。

二,堆栈内存的解释:
    数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内的空间,数组是永远无法使用的,必须有指向的对内存才可以使用,要想开辟新对内存空间必须使用new关键字,之后就是将对内存的使用权交给对应的栈内存,而且一个堆内存空间可以同时被多个栈内存空间指向,比如一个人可以有多个名字,人就相当于对内存,名字就相当于栈内存。

三,取得数组的长度:
    在java中取得数组的长度(也就是数组元素的长度)可以利用数组名称.length完成,数组名称.length--返回一个int类型的数据。

四,二维数组:
    如果可以把一维数组当做几何中的一条线图形,那么二维数组就相当于一个表格。

五,练习

选择排序练习

public class Test{
public static void main(String args []){

int [] arr = {2,3,1,8,4,9,7,4,6};
Print(arr);//调用打印函数

selecSort(arr);//调用排序

Print(arr);//调用排序后打印


}
public static void selecSort(int[] arr){
for(int i = 0 ; i < arr.length ; 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;
}


}
}

}
public static void Print(int [] arr){
System.out.print("[");
for(int x = 0 ; x < arr.length ; x++){
if(x!=arr.length-1){
System.out.print(arr[x]+",");
}
else
System.out.print(arr[x]);

}
System.out.println("]");
System.out.println();
}


}


冒泡排序练习


public class Test{
public static void main(String args []){

int [] arr = {2,3,1,8,6,4,6,9,7,5};
Print(arr);

selecSort(arr);

Print(arr);


}
public static void selecSort(int[] arr){
for(int i = 0 ; i < arr.length-1 ; i++){

for(int j = 0 ; j < arr.length-i-1 ; j++){
if(arr[j] > arr[j+1] ){              //开始冒泡排序

int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}


}
}

}
public static void Print(int [] arr){
System.out.print("[");
for(int x = 0 ; x < arr.length ; x++){
if(x!=arr.length-1){
System.out.print(arr[x]+",");
}
else
System.out.print(arr[x]);

}
System.out.println("]");
System.out.println();
}


}


数组中取大小值

public class Test{
public static void main(String[] args) {
int [] arr = {3,5,6,7,3,2,8,9};
int max = getMax(arr);
System.out.println("max="+max);
}
public static  int getMax(int [] arr){
int max = arr[0];

for(int x =1 ; x < arr.length ;x++){

if(max < arr[x])
max = arr[x]; //取最大值
}
return max;
    }
}


public class Test {
public static int getMin(int[] arr){
int min = arr[0];
for(int x = 1; x < arr.length ; x++){
if( min>arr[x]){
min = arr[x];              //取最小值
}

}
return max;
}
public static void main(String args []){
int arr[] = {3,5,6,8,6,3,1,5,9};
int x = getMin(arr);
System.out.print("min="+x);
}
}

折中法 找中间值。

效率高 但是必须保证该数组是有序的数组。


public class Test{
public static void main(String args []){
int [] arr ={1,2,3,4,5,6,7,8,9,22,33,44,55,66,77};
//int x = halfserch(arr,11);
int index = half(arr,1);
System.out.println("key="+index);
}


第一种方式、
public static int halfserch(int [] arr, int key){
int max , min, mid;
max = arr.length-1;
min = 0;
mid = (max + min)/2;
while(arr[mid]!= key ){
if(key > arr[mid])
min=mid + 1;
else if (key < arr[mid])
max = mid - 1;
if (min > max)
return -1;

mid = (max + min)/2;

}

return mid;
}


第二种方式、
public static int half(int [] arr,int key){
int min= 0,max = arr.length, mid;
while(min<= max){
mid = (max + min)/2;
if (key > arr[mid])
min = mid + 1;
else if (key <arr [mid])
max = mid - 1;
else 
return mid;
}
return -1;
     }


}


进制转换方法

优化成函数 调用即可
public static void trans(int num ,int base , int offset){//base (几进制与&上几),offset偏移量
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;

}
for (int x = pos ;x < arr.length ; x++){
System.out.print(arr[x]);
}
}

public static void tobin(int num){//十进制——————二进制
trans(num,1,1);
}
public static void tobi(int num){//十进制——————八进制
trans(num,7,3);

}
public static void tob(int num){//十进制——————六进制
trans(num,15,4);

}

}

数组真是看了好几天了,以前有学过类似的,不过都忘得差不多了,这次又加深了记忆与理解,老师讲的也很好。


------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

0 0