数组以及对其常用的操作

数组:

#######

本身就是一个容器,用来存储数据。

特点:是固定长度的。

好处:给元素进行编号,从零开始。同时也可以通过length属性获取数组长度。

 

什么时候使用数组呢?

当数据较多时,通常为了方便操作这些数据都需要进行临时存储。

习惯:通常操作数组都需要进行遍历。获取数组中的元素需要一个指针。

通过对指针的值的改变就可以对数组中的数据进行操作。

常出现的问题:

1,数组角标越界异常。ArrayIndexOutOfBoundsException

什么时候会发生呢?当使用到了数组中不存在的角标时就会发生该异常。

2,空指针异常。NullPointerException

当引用型变量没有任何指向时,还在使用该引用变量操作实体内容,会发生该异常。

########

-------------------

int[] arr = new int[3];

该句代码在内存中的分配情况。

堆内存:开辟一个空间,建立一个数组实体,并对数组中的元素进行了默认初始化。

栈内存:定一个局部变量,存放了该实体在对内存中的首地址值。

 

栈内存特点:存放局部变量,当该变量使用完毕(生命周期结束),自动被释放。

堆内存特点:存放数组和对象,每一个实体都有内存地址值,堆内存中的变量都有默认初始化值,通过垃圾回收机制对堆内存中 的不在被使用的实体进行回收。

 

--------------------

 

数组的常见操作:

1,遍历。

public static void printArr(int[] arr)

{

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

{

if(x!=arr.length-1)

System.out.print(arr[x]+",");

else

System.out.println(arr[x]);

}

}

2,获取最值。int[] arr = new int[3];

arr = null;

System.out.println(arr.length);

getMax(null);

public static int getMax(int[] arr)

{

if(arr==null)

throw new RuntimeException();

int max = arr[0];

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

{

if(arr[x]>max)

max = arr[x];

}

return max;

}

 

public static int getMin(int[] arr)

{

int min = 0;

 

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

{

if(arr[x]<arr[min])

min = x;

}

return arr[min];

}

3,排序。

选择排序

特点:选择一个位置,通过该位置上变化的元素和其他元素进行比较,走完一圈,该位置出现最值。

内循环结束一次,在0角标位出现最值。

代码体现形式:

public static void selectSort(int[] arr)

{

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

{

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

{

if(arr[x]>arr[y])

{

swap(arr,x,y);

}

}

}

}

public static void bubbleSort(int[] arr)

{

for(int x=0; x<arr.length; x++)//for(int x=arr.length-1; x>=0; x--)

{

for(int y=0; y<arr.length-x-1; y++)//for(int y=0; y<x; y++)

{

if(arr[y]>arr[y+1])

{

swap(arr,y,y+1);

}

}

}

}

y<arr.length-x-1:

-x : 通过不断循环,减少每一次参与比较元素的个数。

-1 :防止y+1的角标越界。

 

private static void swap(int[] arr,int x,int y)

{

int temp = arr[x];

arr[x] = arr[y];

arr[y] = temp;

}

 

4,查找。

public static int getIndex(int[] arr,int key)

{

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

{

if(arr[x]==key)

return x;

}

return -1;//为什么返回-1呢?因为数组中没有-1这个角标,所以可以通过-1来表示元素不存在的情况。

}

 

折半查找,二分查找。

这种方式有一个必要的前提:被查找的数组一定要是有序的。

 

public static int halfSearch(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 halfSearch(int[] arr,int key)

{

int max,min,mid;

max = arr.length-1;

min = 0;

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值