黑马程序员_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就代表总成绩。
----------
一、什么是数组以及数组常见操作
数组:同一类型数据的集合。就是一个存储数据的容器。
特点: 可以对数组中的每一个元素进行编号,从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就代表总成绩。
相关文章推荐
- 黑马程序员——Java基础---- 数组(静态初始化_常见问题)(04)
- 黑马程序员——Java基础---深层拷贝(数组、ArrayList)
- 黑马程序员--Java基础学习笔记【数组操作、基本数据类型包装类】
- java笔记:关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(上)
- 【黑马程序员】Java基础05:多线程与其安全问题
- 黑马程序员--02.Java语言基础--04.【数组中常见的算法】
- JAVA基础(五) 数组、二维数组以及内存中的数据存储问题
- java基础05数组中的常见操作函数
- java笔记:关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(上)
- 黑马程序员———Java的基础语法和数据类型、数组
- java笔记:关于复杂数据存储的问题--基础篇:数组以及浅拷贝与深拷贝的问题(下)
- JAVA基础--db05_java数组常见功能-查表法
- 黑马程序员_Java基础(数据类型、Java操作符、数组排序方法)
- 黑马程序员__Java基础__数据类型__运算符__数组
- 黑马程序员_01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
- Java基础05-循环问题,数组
- 黑马程序员 Java基础<二>--->数据类型,数组,switch语句
- 黑马程序员:Java基础总结----数组排序问题
- JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题
- 黑马程序员_java基础常见问题100例收集(持续更新,有经典和优秀的欢迎推荐)