hi,我是逸尘,一起学java吧
目标(任务驱动)
1.请掌握数组的内容。
场景:工作已经第三天了,你开始遇到了一些数据结构的问题,这时你大脑中,突然想到数组......
2.请掌基本的数组排序算法。
场景:同事也是新来实习的小王,他在谈论他的的期末考试内容还有一题是冒泡排序,你微微一笑,感觉很简单,但是突然大脑卡壳.....
数组
数组是非常常见的数据结构,是同类型的基本数据类型序列的标识符,我们可以用统一的标识名(数组名)和下标来确定这些同类型的基本数据类型序列的标识符(元素)。
ps:数据结构也非常重要,我们会在单独的篇章去详细的讲解。
同种数据类型的数据集合,比如书法,草书,楷书,行书,再比如我们的兵,马,炮等的集合,我们称为象棋.还有一个养鸭场有 3只鸭,它们的体重分别是 3斤,4斤,3.5斤,
我们称为这三只鸭的重量。在我们程序设计里,可以把这些集合成为数组。
那简单的说明一下,数组就是用来存储一批同种类型数据的内存区域。
一维数组
一维数组就是同类型数据的线性集合,传递一组线性的数据时可以使用它。
创建一维数组
创建(声明)一维数组有两种方式
第一种
数组元素类型 数组名称[];
或者
数组元素类型[] 数组名称;
第二种
数组元素类型[] 数组名称 =new 数组元素类型[数组元素的个数]
初始化一维数组
放入初始的内容
声明有两种,初始化也是对应有两种
第一种也是我们最常用的
数组元素类型 数组名称[]={元素1,元素2,元素3}
第二种
数组元素类型[] 数组名称 =new 数组元素类型[]{元素1,元素2,元素3}
数组的注意点
1.数组是引用类型
package com.ydrj.xb;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,4,5};
System.out.println(arr);
}
}
我们打印这个arr发现他是这样的一个东西
实际上数组是引用数据类型,不是基本数据类型(我们之前学的,也没有这个)
2. 一旦确定类型就不能放其他基本类型
整数类就不能放浮点类型
3.在我们前面初始化后,内容是固定的,(长度,类型)不可以变化,我们也成为静态初始化
当然也可以动态初始化
动态初始化
定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。
其实就是我们创建数组的第二种写法就行了,那么它的初始值默认为0,后面再加数据。
package com.ydrj.xb;
public class Seven {
public static void main(String[] args) {
int[] arr =new int[3];
arr[1]=10;
System.out.println(arr[1]);
System.out.println(arr[0]);
System.out.println(arr[2]);
}
}
当前已经知道存入的元素值,用静态初始化也就是 数组元素类型 数组名称[]={元素1,元素2,元素3}
当前还不清楚要存入哪些数据,用动态初始化也就是 数组元素类型[] 数组名称 =new 数组元素类型[数组元素的个数]。
4.当索引位置大于数组长度,会报错误数组越界异常
java.lang.ArrayIndexOutOfBoundsException
数组的基本操作
数组遍历
我们在流程控制的时候学习过foreach语句他就可以方便的帮我们遍历数组
普通的数组遍历方式
package com.ydrj.xb;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
foreach遍历方式
package com.ydrj.xb;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5,7,3};
for (int x:arr) {
System.out.println(x);
}
}
}
数组长度
数组名称.length
数组的访问
我们知道数组是引用数据类型,那么我们如何访问
数组名称[引索]
package com.ydrj.xb;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5};
System.out.println(arr[0]);
System.out.println(arr.length);
}
}
下标(索引)是0到数组的长度(length)-1
填充替换
在数组中元素定义完成后,可以通过Arrays类的fill()来对数组元素替换。
有两种参数类型,以int类型为例
fill(int[] a,int value)
a:要替换的数组名
value 替换的值
如果替换,这个数组内所有内容都会被替换成value
fill(int[] a,int fromindex,int toindex, int value)
fromindex:要填充的起点(包括)
toindex:到最后一个范围(不包括)
package com.ydrj.xb;
import java.util.Arrays;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5,7,3};
Arrays.fill(arr,1,3,6);
for (int x:arr) {
System.out.println(x);
}
}
}
数组排序
Arrays类的f静态方法sort()可以对数组进行排序。
其中对int是从小到大,对String是字典排序的,数字在字母前,大写字母在小写字母前。
package com.ydrj.xb;
import java.util.Arrays;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5,7,3};
Arrays.sort(arr);
for (int x:arr) {
System.out.println(x);
}
}
}
复制数组
Arrays提供了copyOf()和copyOfRange()
copyOf(arr,类型 newlength)
arr:要复制的数组
newlength:新的数组长度,如果说新的数组长度大于要复制的数组长度则后面补0
copyOfRange(arr,int formindex,int toindex)
arr:要复制的数组
formindex:开始复制数组的索引(包括) 0~arr.length
toindex: 复制结束数组索引(不包括) 可以大于数组长度,补0
package com.ydrj.xb;
import java.util.Arrays;
public class Seven {
public static void main(String[] args) {
int[] arr ={1,2,5,7,3};
int[] brr=Arrays.copyOfRange(arr,1,10);
for (int x:brr) {
System.out.println(x);
}
}
}
查询数组
同样是Arrays类的方法,binarySearch()方法,他是使用二分搜索指定数组的,获得指定对象。
冒泡排序
package com.ydrj.xb;
public class BubbleSort {
public static void main(String[] args) {
//冒泡,从小到大排列
int[] arr = {5, 2, 3, 8, 1};
//轮数
for (int i = 1; i <= arr.length - 1; i++) {
//内部一轮会排出一个最大值放到最后
for (int j = 0; j < arr.length - 1; j++) {
//前面大就调换位置
if (arr[j] > arr[j + 1]) {
//把大的赋给空值里
int temp = arr[j];
//把小值替换到前面
arr[j] = arr[j + 1];
//大值替换到后面
arr[j + 1] = temp;
}
}
}
//普通遍历一下结果
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}