什么是数组:
程序 = 算法+数据结构
算法:解决问题的步骤,流程(顺序,分支,循环)
数据结构:将数据按照某种特定的结构来保存
数怎么存
设计良好的,合理的数据结构可以导致好的算法
数组:就是一种最数据结构
设计程序,首先要确定数据结构
什么是数组?
1.相同数据类型的元素组成的集合
2.数组本身就是一种数据类型,引用类型
3.数组的定义:
定义基本类型数组的要点:
确切的数据类型
整体的数组名字
不可缺少的[]
Int[] arr 与int arr[] 两种写法都可以
声明数组是不规定数组长度,new关键字分配空间是需要制定分配的空间大小,在这里需要规定数据长度
执行new语句才使得数组分配到了指定大小的空间
int a;//声明整型变量a
int[] b;//声明整型数组变量
double[] c;// 声明浮点型数据变量c
char[] c;//声明字符型数组白能量c
boolean[] d;//声明布尔型数组变量d
//声明整型数组a,包含5个元素
//每个元素都市int 类型,默认值为0,
int[] a = new int[5];
//声明浮点型数组d,包含20个元素
//每个元素都是double,默认值为0.0
double[] b = new double[20];
//声明布尔型数组b,包含26个元素,
//每个元素都是boolean性,默认值为false;
boolean[] c = new boolean[26];
4.数组的初始化
int[] arr = new int[4]; // {0,0,0,0}
int[] arr = {1,4,6,8};
int[] arr = new int[]{1,4,6,8};//后面跟大括号了,前面中括号内就不能加个数
int[] arr ;
arr = {1,4,6,8} //编译错误,此方式只能声明同时初始化
arr = new int[]{1,4,6,8};
5.数组的访问
5.1 通过数据名.length 可以获取数组的长度,元素的个数
int[] arr = new int[4];
System.out.println(arr.length); // 4
5.2 通过下标/索引来访问数组中的元素,索引从零开始,最大到数组的长度减一
int[] arr = new int[3];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
// arr[3] = 400;// 数组下标越界异常,长度是3,最大下标只能是2
System.out.println(arr[arr.length-1]);
6.数组的遍历:
int[] arr = new int[10];
for(int i = 0;i<arr.length;i++){
arr[i] = 100;
// arr[i] = (int)Math.random*100;
}
7.数组的复制**********************
这个是重点!!!!!!!!
7.1 第一种方式
System.arraycopy(a,1,a1,1,4);
a:源数组,想要从哪里复制
1:源数组下标,从数组的哪个位置开始赋值
a1:目标数组,复制到哪里去
0:目标数组的起始下标,复制到哪个位置
4:要复制的元素个数,注意这里不能超了个数,这个不能给数组进行扩容
例如:
int [] arr1 = {1,2,3,4,5};
int [] arr2 = {6,7,8,9,10};
System.arraycopy(arr1,0,arr2,2,3);
System.out.println(Arrays.toString(arr2));
//[6, 7, 1, 2, 3]
int[] a = new int[]{1,2,3,4,5};
int[] a1 = new int[6];
//现在a1 = {0,0,0,0,0,0}
System.arraycopy(a,1,a1,1,4);
//执行完这句话之后 a1 = {0,2,3,4,5,0}
7.2 第二种方式
import java.util.Arrays;
使用java.util.Array类的copyOf方法可以实现数组的复制
类型[] newArray = Array.copyOf(拷贝的数组,新数组的长度);
如果传入的新数组的长度小于原数组的长度,就会直接从前到后截取相应长度
int[] a={10,20,30,40,50};
int[] a1 = Arrays.copyOf(a,3);
System.out.println(Arrays.toString(a1));
// 结果:[10, 20, 30]
如果传入的新数组的长度大于原数组的长度,就会在后面以默认值填充.
int[] a={10,20,30,40,50};
int[] a1 = Arrays.copyOf(a,8);
System.out.println(Arrays.toString(a1));
//结果;[10, 20, 30, 40, 50, 0, 0, 0]
所以产生的新数组可以大于源数组的长度,也可以小于原数组的长度
因此可以这个来实现数据的扩容或者缩容
//数组的扩容
int[] a = {10,20,30,40,50};
//数组的扩容,创建新的数组并将源数组的数据复制过去了
a = Arrays.copyOf(a,a.length+1);
//数组的缩容,创建新的数组并将源数组的数据前面一部分拷贝过去了
a = Arrays.copyOf(a,a.length-1);
8.数组的排序
1.当数据不同时,用不同的排序方式,效率也是不同的
2.有一种排序方式,一直是最快的
Arrays.sort(arr);
默认是升序排列
long a = System.currentTimeMillis();
//获取当前时间戳,相当于python 中的time.time()