数组(引用数据类型)就是存放具有相同类型元素的集合。
万变不离其宗,在Java里万物皆为对象,而数组名的本质是一个地址,指向数组元素。
如:
int[] arr2 = arr1;就是将arr1的地址赋给arr2,两者共用一个堆内存数组
一维数组
一维数组是相关变量的一维集合,其逻辑结构是线性表。
使用Java数组需三个步骤:定义数组、为数组分配内存空间、数组元素的赋值运算
语法:
数据类型 数组名[]; 或 数据类型[] 数组名; // 定义一维数组
数组名 = new 数据类型 [数组长度]; // 给定义的数组分配内存空间
如:
int a[]; 或 int[] a;
a = new int[10];
也可以合并为一行(动态数组)
数据类型 数组名[] = new 数据类型[数组长度];
如:
int a[] = new int[10];
可以在定义的时候并赋值(静态数组)
数据类型[] 数组名 = new 数据类型[]{元素...};
或
数据类型[] 数组名 = {元素...};
如:
int[] ages = new int[]{20,21,22};
二维数组
一维数组的多层嵌套构成了多维数组
语法:
数据类型 数组名[][]; 或 数据类型 [][] 数组名;
数组名 = new 数据类型[行数][列数];
同样可以合并为一行
数据类型 数组名[][] = new 数据类型[行数][列数];
数组包装类Arrays
Array类提供的方法都是静态方法
| 名称 | 描述 |
|---|---|
| sort() | 排序 |
| equals() | 对比数组中是否有相同数量的元素且对应位置元素相等 |
| binarySearch() | 对已经完成排序的数组进行二分查找,存在返回索引,否则返回-1 |
| copyOf() | 复制数组指定长度的内容 |
| toString() | 返回数组内容 |
| copyOfRange() | 将指定长度的数组内容复制到一个新数组中 |
注意:
sort()方法可以对任意数组进行升序排序
sort()方法对String类型数组排序时,按照数字排在字母前面,大写字母排在小写字母前面原则进行升序排列
copyOf()语法
Arrays.copyOf(objectArr,int arrLength);
其中objectArr是要进行复制的数组名
arrLength是进行复制的数组长度
copyOfRange()语法
Arrays.copyOfRange(objectArr,int startLength,int endLength);
其中objectArr是要进行复制的数组名
startLength是要进行复制的数组开始位置
endLength是要进行复制的数组终止位置
数组的相关操作
数组的升序排列
使用sort方法
步骤:
1、导入数组类 import java.util.Arrays;
2、在主方法中调用sort()方法 Arrays.sort(数组名);
冒泡排序
概念
每次从数组中找出最大值放在数组的后边。
思想
从头开始两两比较,把较大的元素与较小的元素进行比较,每轮把当前最大的一个元素存入到数组当前的末尾
步骤
1、定义一个外部循环控制总共需要几轮(数组长度-1)
2、定义一个内部循环控制每轮依次往后比较几个位置(数组长度-i-1)
3、若当前位置的元素值 > 后一位置的元素值,两者交换
二分查找
概念:又叫做折半查找,每次取中间值比较,不断缩小搜索范围。
前提:数组已经排序
选择排序
概念:每轮选择当前位置,开始找出后面的较小值与该位置交换。
关键:
确定共需选择几轮:数组长度-1
控制每轮从以前位置为基准,与后面元素选择几轮