本文介绍了数组的基本概念和使用方法。数组是存储相同类型变量的集合,分为静态初始化和动态初始化两种创建方式。作为引用类型,数组变量存储在栈中,实际内容存放在堆上。文章详细讲解了数组的创建、初始化、遍历等基本操作,以及作为函数参数和返回值的应用。此外还介绍了数组常见操作如转字符串、拷贝、求平均值、二分查找、排序等实用方法,最后简要提及了二维数组的打印方式。通过具体代码示例展示了数组在实际编程中的多种应用场景。
数组的基本概念
什么是数组
数组是存相同类型的变量
比如 5个int类型的值 想放在同一空间
数组的创建和初始化
5个int 类型的值 放在同一空间
类型[长度] 数组名
int[5] arr
数组的创建及初始化
不初始化默认为0
引用类型默认为0
int []arr={初始化的值}
int[] arr=new int[长度];
int[] arr=new int[]{初始化的值}
初始化
int[] arr;
赋值
arr={}
数组分为静态初始化和动态初始化
动态初始化
指定好长度 内容为空 自己赋值
int[] arr=new arr[长度]
静态初始化
指定长度和内容
int[] arr={0,1,2,3,4}
数组的使用
数组中元素的使用
public static void main(String[] args) {
int[] a={0,1,2,3,4,5,6};
System.out.println(a[0]);
//遍历的3种方式
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
for (int x:a
) {
System.out.println(x);
}
System.out.println(a.toString());
}
数组是引用类型
jvm的内存分布

基本数据类型和引用数据类型
基本数据类型在空间中直接储存
引用数据类型并不是而在栈上存地址 引用堆上的内容
数组引用变量在栈上 由于Java中无法获取地址 而引用变量储存的对象所在的空间地址 而数组的内容存放在堆上 通过引用变量去操作对象
引用变量
public class ertiiiian {
public static void main(String[] args) {
int[] arr=new int[3];
arr[0]=100;
arr[1]=200;
arr[2]=300;
int[] arr2={0,2,3};
arr=arr2;
arr[0]=1;
arr[1]=2;
arr2[2]=3;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr2[i]);
}
}

通过引用
其中arr=arr2
改变的arr数组 让arr引用的内容指向arr2

null
public static void main(String[] args) {
int[] arr=null;
System.out.println(arr[0]);
}
使用数组初始化为null 引用对象就会报空指针异常

数组的应用
保存数据
保存相同类型的数据
public static void main(String[] args) {
int[] arr=new int[3];
arr[0]=100;
arr[1]=20;
arr[2]=300;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

作为函数参数
public static void dayin(int[] arr){
System.out.println(arr[0]);
}
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7};
dayin(arr);

作为返回值
public static int[] dayin(int[] arr){
arr[0]=100;
arr[1]=200;
return arr;
}
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7};
int[] arr2=dayin(arr);
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}

数组练习
数组转字符串
public static void main(String[] args) {
String ret="[";
int[] arr={1,2,3,4,5,6};
for(int i=0;i< arr.length;i++){
ret+=arr[i];
ret+=',';
}
ret+="]";
System.out.println(ret);

数组拷贝
public static void main(String[] args) {
int[] arr={0,2,3,4,5};
System.out.println(Arrays.toString(arr));
}

数组求平均值
public static void main(String[] args) {
//平均值
int sum=0;
int[] arr={0,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
double ping=(double) sum/ arr.length;
System.out.println(ping);
}

二分查找
前提要有序
public static void main(String[] args) {
int [] arr={1,2,3,4,5,6,7,8,9};
int a=2;
int b=0;
int c=arr.length-1;
while(b<=c){
int mid=b+(c-b)/2;
if(arr[mid]>a){
c=mid-1;
} else if (arr[mid]<a) {
b=mid+1;
}
else if(arr[mid]==a){
System.out.println("找到了");
break;
}
}

数组排序(冒泡排序)
public static void paixu (int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
public static void main (String[] args){
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
paixu(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}

逆序打印
public static void main (String[] args){
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int i = arr.length-1; i >=0; i--) {
System.out.print(arr[i]);
}
}

二维数组

二维数组的打印
我们把二维数组理解为多个一维数组
public static void main (String[] args){
int [][] arr={{1,2,3,4},{2,3,45,5}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
