数组概述:
1)数组是一种数据类型(引用类型)
2)数组是相同数据类型的元素的集合
3)在数组中元素这个概念其实就相当于基本类型的变量值
4)数组的长度一旦定义好,就不能改变了
5)数组是再内存中开辟一块连续的内存空间
数组的定义及初始化:
数组的定义及初始化形式有很多种,但是最常用的就两种,其余的样式也可以实现初始化及定义但是特别特别少有人用,反正我是目前没有遇到过那么用的,所以此次就只介绍两种常用的样式吧。
哦对了,记住!数组和变量一样必须定义且初始化,否则会编译错误。
//数组的定义及初始化:
// 第一种:
数据类型[] 数组名 = new 数据类型[元素个数];
//此种用于你知道元素个数但是不知道元素具体的值时使用,
int类型数据,元素默认值是0 double类型数据,元素默认值是0.0
boolean类型数据,元素默认值是false
//第二种:
数据类型[] 数组名 = {
元素值,元素值,元素值};
//此种用于你知道每个元素具体的值时使用
数组的访问:
//数组的访问:————访问的是数组中的元素
//通过(数组名.length)可以获取数组的长度(元素个数)
int[] arr = new int[10];
System.out.println(arr.length);//10
//给第二个数赋值100
arr[1] = 100;
//通过下标/索引来访问数组中的元素
//下标从0开始,最大到(数组长度-1)
arr[3.14]//编译错误,下标只能是整数类型
arr = {
31.15,5.2};//编译错误,元素类型与数组类型不匹配,元素类型中有一个是double类型但数组确实int类型。
arr[3];//运行时会发生ArrayIndexOutOfBoundsException数组下标越界异常,数组元素下标的最大值是数组长度-1,举例:若一个数组有5个元素,那么最后一个元素的下标就是4,
数组的遍历/迭代:
//迭代/遍历:
for(int i=0;i<arr.length;i++){
//从0开始依次拿出数组中的每个元素的下标
System.out.println(arr[i]);//每拿出一次下标则输出一次数组中下表对应的值
}
//给数组中的每个元素赋值100
for(int i=0;i<arr.length;i++){
arr[i] = 100;
}
数组的复制:
//若旧元素复制给新元素的时候两个元素的下标相同:
int[] a = {
1,58,15,99,56};
int[] b = new int[5];
for(int i=0;i<a.length;i++){
b[i] = a[i]
}
//在这里b数组的长度可以随意但是:
//--若b数组长度大于a数组长度,则末尾补默认值
//--若b数组长度小于a数组长度,则从末尾截取
//若不相同时:
int[] a ={
10,12,18,5,99};
int[] b = new int[5];
// 方法1 arraycopy(灵活性高)
System.arraycopy(a,1,b,0,4);
// a:源数组名 1:源数组的起始下标 b:目标数组 0:目标数组的起始下标 4:要复制的元素个数
// 复制的元素个数不可以越界,举例:若从数组a的第2个元素开始复制,复制5个元素那么控制台就会报错,显示越界异常
// 其次目标数组和源数组的起始下标也不可以越界,举例:若目标数组b的元素有5个我却非要从第6个元素开始,那么就会控制台显示越界异常(原数组与之相同,起始位置也不可以越界)
// 方法2
int[] a ={
10,12,18,5,99};
int[] b = Arrays.copyOf(a,6);
// b:目标数组名
// a:源数组名
// 6:目标数组长度(目标数组元素个数)
// 6.1)--若目标数组长度大于源数组长度,则末尾补默认值
// 6.2)--若目标数组长度小于源数组长度,则从末尾截取
数组的排序:
1)排序是对数组所施加的最常用的算法
2)排序算法:
2.1)最常见的排序算法:冒泡排序,快速排序,插入排序…等
2.2)若数据量小,用那种排序,系统的执行速度(效率)都不会有明显的差异
2.3)若数据量大(几十万,几百万):
当数据量大的时候,用不同的排序方式,最终的效率也是不同的,但是有一种方法一直是 最快的:Arrays.sort(数组名),此方法是java提供的数组元素升序的排序方法
数组的排序(升序)Arrays.sort(数组名):
//给数组的每一个元素赋值1-100之间的随机数
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
//遍历数组
arr[i] = (int) (Math.random() * 100) + 1;//给数组元素赋值1-100之间的数
System.out.println(arr[i]);//输出每个元素
}
// 升序
Arrays.sort(arr);
// 控制台升序输出每个元素
for (int i=0; i < arr.length; i++) {
//遍历数组
System.out.println(arr[i]);//输出每个元素
}
// 控制台降序输出每个元素
for(int i=arr.length-1;i>=0;i--){
//从arr数组最后一个元素向arr数组第一个元素遍历
System.out.println(arr[i]);//输出每个元素
}
找出数组的最大值:
假设一个元素为最大值,其次拿这个元素去和剩余的元素对比,若和它对比的元素比它大那么就将对比的内个元素值赋值给它,然后继续对比,直到比完所有元素
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
//遍历数组
arr[i] = (int) (Math.random() * 100) + 1;//给数组元素赋值1-100之间的数
System.out.println(arr[i] + "\t");
}
// 求数组元素的最大值
int max = arr[0];//假设arr[0]为最大值
for (int i=1;i<arr.length;i++){
//遍历数组(从数组的第二个元素开始)
if (arr[0]<arr[i]){
//假设arr[i]大于arr[0]
arr[0] = arr[i];//将较大值赋值给arr[0]
}
}
找出数组的最小值:
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
//遍历数组
arr[i] = (int) (Math.random() * 100) + 1;//给数组元素赋值1-100之间的数
System.out.println(arr[i] + "\t");
}
// 数组的最小值
int big = arr[0];//假设arr[0]为最小值
for (int i=1;i<arr.length;i++){
//遍历数组(从数组的第二个元素开始)
if (arr[0]>arr[i]){
//假设arr[i]小于arr[0]
arr[0] = arr[i];//将较小值赋值给arr[0]
}
}
数组的扩容:
数组的扩容:又创建了一个更大的新的数组,再将源数组数据复制进去了
int[] arr = new int[10];//源数组
int[] arrs = Arrays.copyOf(arr,arr.length+1);//扩容一位
/*
arrs:新数组名
arr:源数组名
arr.length+1:源数组长度+1的数
*/
//既然能扩容那么就能缩容咯!往下看:
int[] arr = {
10,1,5,56,59,99};//源数组
int[] arrs = Arrays.copyOf(arr,arr.length-1);//缩容一位
//缩容后将从末尾截取(选择)被抛弃的元素
后续更新声明:
后续更新的篇幅量会越来越大,而且我需要把每天上课老师讲的东西做笔记总结,然后吸收透彻后才会写博客,因此后续更新速度会较慢,望谅解。
还是老三样,觉得写的还可以的化点赞关注一下咯,若对篇章有任何意见或建议,评论提议,谢谢!