您的位置:首页 > 职场人生

黑马程序员_Java基础_05数组数组拷贝、数据常见问题

2014-09-11 17:40 375 查看
------- android培训ios培训、期待与您交流!
----------

一、什么是数组以及数组常见操作

数组:同一类型数据的集合。就是一个存储数据的容器。
特点: 可以对数组中的每一个元素进行编号,从0开始;这样方便对数组中的元素进行操作。
通过数组的length属性可以获取到数组的长度。
注意:
定义数组时,必须指定长度。
什么时候使用数组呢?
当参与运算的数据较多时,必须想到先将数据进行临时存储。

对数组容器的常见操作:

1、对数组进行遍历
2、获取最的最大或最小值

public static int getMax(int[] arr)

{

int max = 0;

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

{

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

max = x;

}

return arr[max];

}

3、数组排序

/*

指定一个位置用该位置上的元素和数组元素进行比较。

在内循环结束一次,该位置出现最值。

*/

public static void sort_1(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])

{



}

}

}

}

/*

相邻两个元素进行比较。

内循环结束一次,后位出现最值。

*/

public static void sort_2(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])

{



}

}

}

}


注意事项:y<arr.length-x-1: -x是为了减少参与比较的元素的个数; -1是为了避免脚标越界。

public static void swap(int[] arr,int a,int b)
{

//arr[a] = arr[a]^arr[b];

//arr[b] = arr[a]^arr[b];

//arr[a] = arr[a]^arr[b];



int temp = arr[a];

arr[a] = arr[b];

arr[b] = temp;

/**/

}


4、折半查找:前提:必须是有序的数组才有效。//这个比较经典,值得回顾
public static int binarySearch(int[] arr,int key)

{

int start=0,end=arr.length-1,mid;
while(start<=end)
{

mid = (start+end)>>1;

if(key>arr[mid])

start = mid + 1;

else if(key<arr[mid])

end = mid - 1;

else

return mid;

}
return -1;

}


二、多维数组复制:
多维数组赋值时,先高维后低维,简言之就是从左到右

public class TestMutiArray{

public static void main(String args[]){

int[][] a={{1,2,3},{2,3},{3,4,5,8}};

for(int i=0;i<a.length;i++){ //使用双for循环遍历二维数组并输出打印其值

for(int j=0;j<a[i].length;j++){

System.out.println(a[i][j]);

}

}

}

}

三、数组拷贝问题:

public class TestMutiArray{

public static void main(String args[]){

int[][] a={{1,2,3},{2,3},{3,4,5,8}};

for(int i=0;i<a.length;i++){

for(int j=0;j<a[i].length;j++){

//System.out.println(a[i][j]);

}

}

//arrayCopy();

arrayCopy1();

}

public static void arrayCopy(){

int arr[]={1,2,3,4,5};

int arr1[]=new int[8];

System.arraycopy(arr,0,arr1,0,arr.length);

for(int i=0;i<arr1.length;i++){

System.out.println(arr1[i]);

}

}

public static void arrayCopy1(){

int[][] a={{1,2},{3,4},{5,6,7}};

int[][] a1=new int[3][];

System.arraycopy(a,0,a1,0,a.length);

a1[2][1]=100; ——————①

System.out.println("被拷贝的数组:"+a[2][1]);

System.out.println("拷贝的数组:"+a1[2][1]);

}

}

①这里需要注意的是,这里拷贝的时候,由于拷贝的是数组的引用,所以在更改拷贝的值之后,其实也将原来数组引用的所指向的值改变了,具体参照下图:





四、 数组中的涉及的其他问题:

1、数组脚标越界异常。
2、空指针异常。
二维数组:可以理解为数组中的数组。

格式1:int[][] arr = new int[3][];

System.out.println(arr[0]);//null。是二维数组中第一个一维数组。该数组默认初始化值为null。

格式2:int[][] arr = new int[3][2];

System.out.println(arr[0]);//是数组的哈希值。因为二维数组中的小数组被重新初始化为一个数组实体。

格式3:int[][] arr = {{3,4},{8,1,9}};

System.out.println(arr.length);//打印二维数组的长度。
System.out.println(arr[1].length);//打印二维数组中第二个小数组的长度。

二维数组元素求和:其实就是大圈套小圈(使用双for循环可完成)
int sum = 0;
for(int x=0; x<arr.length; x++)
{
for(int y=0; y<arr[x].length; y++)
{
sum = sum + arr[x][y];
}
}
什么时候使用二维数组呢?
有很多数据。这些数据又有分组。这时可以使用二维数组。
例如:学生的成绩
学生甲:80,88,90,86
学生乙:90,90,70,80
int[][] arr = {{80,88,90,86},{90,90,70,80}};
arr就代表总成绩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐