java 数组

本文介绍了数组的基本概念和使用方法。数组是存储相同类型变量的集合,分为静态初始化和动态初始化两种创建方式。作为引用类型,数组变量存储在栈中,实际内容存放在堆上。文章详细讲解了数组的创建、初始化、遍历等基本操作,以及作为函数参数和返回值的应用。此外还介绍了数组常见操作如转字符串、拷贝、求平均值、二分查找、排序等实用方法,最后简要提及了二维数组的打印方式。通过具体代码示例展示了数组在实际编程中的多种应用场景。

数组的基本概念

什么是数组

数组是存相同类型的变量

比如 5个int类型的值 想放在同一空间

数组的创建和初始化

5个int 类型的值 放在同一空间

类型长度 数组名

int5 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();

   }
}
相关推荐
兵慌码乱8 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵10 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio13 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
kisshyshy14 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
用户03321266636715 小时前
使用 Python 从零创建 Word 文档
python
Csvn19 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽20 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
猿人谷21 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
复杂网络1 天前
Stable Diffusion 视觉大模型微调技术深度调研
算法