Java入门基础之数组的使用
** 1.数组(Array):**
在Java中,数组(Array)分为一维数组和二维数组。存出一组同一个数据类型的容器叫做数组。
数组对每一个存入的数据都会进行自动排序,而排序从零开始,这个编号就叫做下标。数组的长度是固定不可变的。
.2格式:
声明数组的格式有三种
第一种 :
数据类型[] 数组名 = new 数据类型[数组存放的个数],这种格式适用于一些知道元素的个数,但是 不知道具体元素值得情况。
例子:int[] array = new int[10];
int[] array1 = new int[30];
第二种格式:
数据类型[] 数组名 = new 数据类型 []{元素1,元素2,元素3…}
这种格式适用于知道具体元素值,而使用。
例子:int[] array = new int[]{1,2,3,4,5};
第三种格式:
数据类型[] 数组名 = {元素1,元素2,元素3…}
例子:String array={“张三”,“李四”,“王五”}
3.一维数组的应用
获取指定位置 的元素:数组名[下标] :arr[0];
获取数组的长度:length arr.length;
遍历数组:
普通 for循环
for(int i=0;i<arr.length;i++){
System.out.pringln(arr[i]);
}
*切记,遍历整个数组,变量i一定要小于arr.length,不能用作等于,如果要用小于等于的话,就需要写成i<=arr.length-1的形式。
增强for循环
增强 for循环是基于迭代器的。迭代器后期博文会发表,这里就先使用:
for(int i:arr){
System.out.pringln(i);
}
Arrays.toString()
就是将数组中的数据依次取出来,拼接成一个字符串
String str = Arrays.toString(arr);
System.out.println(str);
4.数组的扩容
实际上是会产生一个新的数组
System.arraycopey()
System.arraycopy(要复制的数组,数组的起始下标,要存放的数组,存放的起始位置,复制的元素的个数)
System.arraycopy(arr,3,arr1,2,4);//从arr中3的位置开始复制,存放到arr1中,从arr1中2的位置开始存放,复制4个元素。
int arr ={1,2,3,4,5};
int arr1=new int[arr.length * 2];
System.arraycopy(arr,0,arr1,0,arr.length);
Arrays.copyOf()
arr = Arrays.copyOf(要扩容的大小,扩容后的大小);
数组在扩容完成之后好,堆内存的地址就会发生改变,底层使用的就是Arrays.arraycopy();
Arrays.copyOf(arr,len);//底层代码。
int[] arr={1,2,3,4}
int[] arr2 = new int[len];
if(len < arr.length){
System.arraycopy(arr,0,arr2,0,len);
} else {
System.arraycopy(arr,0,arr2,0,arr.length);
}
arr = arr2;
二维数组
二维数组的每一个元素就是一个一维数组,是一个存放一维数组的容器,实际上二维数组中存储的就是一维数组在堆内存中一维数组待得内存地址。
格式:
声明二维数组也是有三种格式
第一种格式:
1.数据类型[][] 数组名 = new 数据类型[二维数组的大小][一维数组的大小];
int[]arr[] = new int[3][5];
int arr[][] = new int[3][5];
第二种:
2.数据类型[][] 数组名 = new 数据类型[二维数组的大小][];
arr[0] = new int[5];
arr[1] = new int[3];
arr[2] = new int[0];
第三种:
3.数据类型[][] 数组名 = { {元素1,元素12,……},{元素21,元素22,……},……{}};
int[][] arr = { {2,3}, {1}, {3,5,6}, {1,2,3,7}, {1}};
5.数组的使用
数组元素的排序
数组元素的排序算法有:冒泡排序,快速排序,归并排序,选择排序,希尔排序,堆排序等。。。
下面介绍几种排序算法:
用的最多的冒泡排序:
相邻两个元素相互比较,根据排序法则来定由小到大排序,还是由大到小,如果 由小到大,相邻两数比较以后,小的放前面。需要第三方变量,来辅助完成这一个操作,每完成一轮操作,每一轮最后面的数字就会被确定下来,不参与之后操作:冒泡排序
代码如下:for(int i = 1; i <= arr.length - 1; i++){
for(int j = 1 ; j <= arr.length - i; j++){
if(arr[j - 1] > arr[j]){
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
选择排序:
选择排序
代码如下:
for(int i = 1;i < arr.length;i++){
for(int j = i - 1;j
int temp = arr[i -1];
arr[i-1] = arr[j];
arr[j] = temp;
}
}
}
二维数组应用实例:
著名案例:杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
输入一个数n,输出前n行
代码如下:
//从控制台获取行数
Scanner s = new Scanner(System.in);
int row = s.nextInt();
//根据行数定义好二维数组,由于每一行的元素个数不同,所以不定义每一行的个数
int[][] arr = new int[row][];
//遍历二维数组
for(int i = 0; i < row; i++){
//初始化每一行的这个一维数组
arr[i] = new int[i + 1];
//遍历这个一维数组,添加元素
for(int j = 0; j <= i; j++){
//每一列的开头和结尾元素为1,开头的时候,j=0,结尾的时候,j=i
if(j == 0 || j == i){
arr[i][j] = 1;
} else {//每一个元素是它上一行的元素和斜对角元素之和
arr[i][j] = arr[i -1][j] + arr[i - 1][j - 1];
}
System.out.print(arr[i][j] + “\t”);
}
System.out.println();
}
还没有评论,来说两句吧...