目录
1.数组定义:
数组是一种线性数据结构,是一个使用连续的内存空间存放相同的数据类型的集合容器
特点:
- 容器
- 其中所有元素具有相同数据类型
- 一旦创建,大小不能改变
2.一维数组的声明与创建:
1.元素类型【 】 数组名 = new 元素类型【元素个数或者数组长度】;
2.元素类型 【 】数组名= new 元素类型【 】{元素,元素,元素……};
3.元素类型【 】数组名={元素,元素,元素……};
Eg:
int []arr=new int[5];
int [] arr=new int[]{1,3,5};
int []arr={1,4,6};
注意:
- 给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。
- 数组下标最小是:0;数组下标最大是:数组元素-1。
- 数组大小可以由变量确定,但是变量在此之前必须赋值。
- 数组.length可以获取数组大小。
如下是数组下标越界异常报错:
3.数组的初始化:
(1)方法一:
int []arr=new int [5];//此时数组默认值为0
arr[0]=1;
arr[1]=4;//数组初始化
(2)方法二:
int[] arr = new int[]{3,5,1,7};//第二种方式:创建并初始化数组
(3)方法三:
int[] arr = {3,5,1,7};//第三种方式:创建并初始化数组
此外,补充由变量确定数组大小代码:
scanner sc=new Scanner(System.in);
int cnt=0;
cnt=sc.nextInt();
if(cnt>0){
int [] numbers=new int[cnt];
for(int i=0;i<cnt;i++){
numbers[i]=sc.nextInt();
}
}
4.数组的内存分析:
arr1和arr2都只是数组的管理者(称为数组变量),而不是所有者,它们都指向同一个堆内存。
5.数组变量
- 数组变量是数组的管理者,而非数组本身
- 数组必须创建出来然后交给数组变量来管理
- 数组变量之间的赋值是管理权限的赋值
- 数组变量之间的比较是否判断管理同一数组
Eg:
package second;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int[]a= {1,2,3};
int []b= {1,2,3};
System.out.println(a==b);
}
}
6.二维数组
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };
int[][] arr1 = { {1,2,3},{4,5,6} };
int[][] arr2 = new int[][] { {1,2,3},{4,5,6} };
int[][] arr3 = new int[2][3];
int[][] arr4 = new int[2][];
注:遍厉二维数组每一个元素:
int [][]a=new int [10][9];
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
a[i][j]=in.nextInt();
}
}
7.数组常用方法
在使用前要导入包:
import java.util.Arraya;
或者:
import java.util.*;
方法 | 作用 |
Arrays.toString(数组名); Arrays.deepToString( 数组名); | 将一维数组变为字符串; 将二维数组变为字符串; |
Arrays.copeOf(要复制的数组名,要返回的副本的长度); | 从下标0开始复制指定长度数组的内容到新数组; |
Arrays.copeOfRange(要复制的数组名,复制范围初始下标,复制范围最终下标不包括它);左闭右开 | 拷贝指定范围数组; |
Arrays.sort(数组名); | 对数组进行排序; |
Arrays.fill(要填充的数组名,要储存的元素); Arrays.fill(要填充的数组名,填充初始下标,填充最后下标不包含它,要储存的元素);左闭右开 | 对数组内容进行填充; |
Arrays.equal(数组名1,数组名2); | 判断两个数组的内容是否相同 |
Arrays.binarySearch(要搜索的数组名,搜索第一个元素的下标,搜索的最后一个元素的下标,要搜索得值);左闭右开 | 二分查找数组内容,使用前先sort排序数组。 |
1
public static void main(String[] args) {
int[] array = new int[] { 1,2,3,4 };
System.out.println(Arrays.toString(array));//[1,2,3,4]
}
2
public static void main(String[] args) {
int[] array = new int[] { 1,2,3,4 };
int[] ret = Arrays.copyOf(array,2);
System.out.println(Arrays.toString(ret));//[1,2]
}
3
public static void main(String[] args) {
int[] array = new int[] { 1,2,3,4 };
int[] ret = Arrays.copyOfRange(array,2,4);
System.out.println(Arrays.toString(ret));//[3,4]
}
4
public static void main(String[] args) {
int[] array = new int[] { 4,3,2,1 };
Arrays.sort(array);
System.out.println(Arrays.toString(array));//[1,2,3,4]
}
5
public static void main(String[] args) {
int[] array = new int[10];
Arrays.fill(array,10);
Arrays.fill(array,2,8,20);
System.out.println(Arrays.toString(array));
}
6
public static void main(String[] args) {
int[] arr1 = new int[] { 4,3,2,1 };
int[] arr2 = new int[] { 1,2,3,4 };
int[] arr3 = new int[] { 1,2,3,4 };
System.out.println(Arrays.equals(arr1, arr2));//false
System.out.println(Arrays.equals(arr2, arr3));//true
}
7
public static void main(String[] args) {
int[] arr1 = new int[] { 4,3,2,1 };
System.out.println(Arrays.binarySearch(arr1, 3));//下标是1
}