数组特点
数组是用来存储一组有序的数据的容器
数组中存储的地址是连续的
数组中存储的类型是一致的
数组一旦创建,长度不可改变
声明并创建数组
//数组的三种写法
1. 类型[] 变量名 = new 类型[长度]
2. 类型[] 变量 = new 类型[] {val,val1,val2...};
3. 类型[] 变量名 = {val,val2,val3...};
- 遍历数组
for (int i=0;i<array.length;i++){
int x = array[i];
}
- 数组的最大小值
int max = array[0] ; // 定义一个最大值,默认数组中的第一个元素是大的
int min = array[0] ; //
for(int i = 1 ; i < array.length ; i++) {
if (max < array[i] ) {
max = array[i] ;
}
if (min > array[i]) {
min = array[i] ;
}
}
数组的排序
- 冒泡排序
//外层循环 控制排序的次数
for (int i=1;i<array.length;i++){
//内层循环 控制 比较的次数
for(int j=0;j<array.length-i;j++){
if(array[j]>array[j+1]){
array[j]=array[j]^array[j+1];
array[j+1]=array[j]^array[j+1];
array[j]=array[j]^array[j+1];
}
}
}
- 选择排序
//外层循环控制循环次数
int[] array=new int[]{5,37,2,34,11,32,12};
for (int i = 0; i < array.length-1; i++) {
int index=i;
for (int j=i;j<array.length;j++){
if (array[index]>array[j]){
index=j;
}
}
int temp=array[i];
array[i]=array[index];
array[index]=temp;
}
System.out.println(Arrays.toString(array));
- 插入排序
int[] array=new int[]{5,37,2,34,11,32,12};
for (int i = 0; i < array.length; i++) {
int tem=array[i];
int j = i - 1;
for (;j>=0;j--){
if (array[j]>tem){
array[j+1]=array[j];
}else{
break;
}
}
array[j+1]=tem;
}
System.out.println(Arrays.toString(array));
数组的维护
向数组中添加或者删除元素,返回的一定是一个新的数组
System.arraycopy(src,srcOffset,dest,offset,length):将指定的数组内容拷贝到另一个数组中 src:要进行复制的数组 offset:要进行复制的数组的起始位置 dest:进行存储新数据的数组 offset:从新数组的哪一个位置存储数据 length:拷贝的长度
- 向数组中添加一个元素
- 向数组中删除一个元素
采用一段连续的存储单元来存储数据
对于指定下标的查找,时间复杂度为O(1);
通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为0(n);
当然,对于有序数组,则可采用二分法查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);
对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)
冒泡,选择排序时间复杂度是O(n^2)
Arrays工具类的使用
- Arrays.toString(array):将指定的数组以字符串的形式表示,返回一个字符串
- Arrary.sort(array):对指定的数组 按照升序进行排序(底层采用的快速排序)
- Arrays.sort(array,from,to):将数组的from…to之间的元素进行 排序(不包含to)
- Arrays.copyOf(array,newLen):将数组中从第1个元素到newLen长度的内容拷贝到新数组中
- Arrays.copyOfRange(array,from,to):将数组的from…to之间的元素拷贝到新数组中
- Arrays.stream(array).max():求数组的最大值
- Arrays.stream(array).min():求数组的最小值
- Arrays.stream(array).sum():求数组的和
- Arrays.stream(array).average():求数组的平均值
to
:截至位置,不包括
ArrayUtils 工具类的使用
不是JDK自带的,是apache提供的,封装在了commons-lang3.jar中
jar 是一个压缩文件,jar里面压缩的是.class字节码文件
Java中jar的下载,推荐下载地址。
在idea的项目中,新建一个文件夹,推荐叫lib
将下载好的jar 拷贝到lib文件夹下
将lib文件夹作为库(选中lib右键–>add as Libary)
- add:向数组尾部添加一个元素
- addAll:向数组尾部添加 多个元素
- addFirst:向数组头部添加一个元素
- remove:根据索引删除指定位置的元素
- removeElement:删除数组中指定的元素
- removeAllOccurrences:删除数组中指定的元素的相同数
- clone():克隆一个数组,返回一个新数组,和原数据内容一样
- toObject():将基本类型数组 转成 包装类型数组
- toPrimitive():将 包装类数组转成 基本数据类型