黑马程序员——数组

来源:互联网 发布:算法必须有输出 编辑:程序博客网 时间:2024/06/05 16:24
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
数组为引用数据类型。
int[] arr = new int[3];
在栈中开辟一块内存给arr。
在堆中开辟一块内存用来存储new int[3]。
将new int[3]的地址赋值给arr。
这种数据类型成为引用数据类型。
当arr = null;并且没有新的数据引用对中内存的地址时
堆中创建的new int[3]没有意义,为垃圾数据,有java的垃圾处理器不定期处理。

定义格式:
int[] arr = new int[3];
int arr[] = new int[3];
int[] arr = new int[]{1,2,3,4,7,5,}; //静态初始化

arr.length;
数组长度。

常见错误:
int[] arr = new int[3];
System.out.println(arr[3]); 
编译时无错,运行时出错。因为编译时还没有运行,数组还不存在。

int[] arr = new int[3];
arr = null;
System.out.println(arr[1]); 
arr已经不具有实体了,不能操作数组。空指针异常。


数组的遍历:
int[] arr = new int[3];
for(int x = 0; x<3; x++)
{
System.out.println(arr[x]);
}

遍历练习:定义功能,用于打印数组中的元素,元素间用逗号隔开
public static void printArray(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.our.println(arr[x]+"]");
}
}

练习:获取数组中的最大值
public static int getMax(int[] arr)
{
int t = arr[0];
for(int x = 1; x<arr.length; x++)
{
t = t>arr[x]?t:arr[x];
}
return t;
}

练习:选择法排序
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])
{
int t = arr[x];
arr[x] = arr[y];
arr[y] = t;
}
}
}
}

练习:冒泡法排序
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++)
{
if(arr[y]>arr[y+1])
{
int t = arr[x];
arr[x] = arr[y];
arr[y] = t;
}
}
}
}

练习:折半查找
class HalfSearch
{
public static int halfSearch(int[] arr,int key)
{
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid]!=key)
{
if(arr[mid]>key)
max = mid - 1;
else if(arr[mid]<key)
min = mid + 1;


mid = (min+max)/2;

if(min>max)
return -1;
}
return mid;
}

public static void main(String[] args)
{
int[] arr = new int[]{1,3,5,7,9,11,13,15};
int x = halfSearch(arr,4);
System.out.println("x="+x);
}
}


0 0