【Java】数组的定义与使用

数组:一组相同数据类型的集合,长度固定
类集:动态数组
基本概念
1.动态初始化
数组是引用数据类型,有内存分配问题.
语法:声明并初始化数组
数据类型 [ ] 数组名称 = new 数据类型 [长度]
声明并开辟长度为3的整型数组
int[ ] date = new int [3];
当数组开辟新空间之后,可采用以下方式进行操作:
a.当开辟数组空间后,所有数组内容为其数据类型默认值
b.通过数组下标来访问每个元素.
访问数组元素使用数组名称[索引下标],索引从零开始.
当访问下标超出数组长度时,会抛出运行时异常
c…数组属性length:表示数组长度
数组名称.length:返回此数组长度
静态初始化:在声明数组的同时向数组中每个元素赋值
int [ ] date = new int [ ]{1,3,5};
d.通过for循环来遍历数组

for-each循环
for(int temp :date){
//代码体
}
例如:定义一个int型数组

public class ArrayDemo{ 
    public static void main(String[] args) { 
        int[] x = new int[3] ; // 开辟了一个长度为3的数组 
        System.out.println(x.length) ; 
        x[0] = 1 ; // 数组第一个元素 
        x[1] = 2 ; // 数组第二个元素 
        x[2] = 3 ; // 数组第三个元素 
        for (int i = 0; i<x.length ; i++) {
            System.out.println(x[i]) ; // 通过循环控制索引下标更改 
        }
    }
}
    

2.数组引用传递
引用数据类型
int [ ] date = new int [3]
date称为数组的引用(保存在栈内存),任何一个引用一定指向一块堆内存空间.
只要看见关键词new,就一定在堆上分配空间.

public class ArrayDemo{ 
    public static void main(String[] args) { 
        int[] x = null ;
        x = new int[3] ;
        System.out.println(x.length) ; 
        x[0] = 10 ; // 数组第一个元素 
        x[1] = 20 ; // 数组第二个元素 
        x[2] = 30 ; // 数组第三个元素 
        for (int i = 0; i<x.length ; i++) { 
            System.out.println(x[i]) ; // 通过循环控制索引下标更改
        }
    }
}

在这里插入图片描述
用传递空间:同一块堆内存空间可以被不同的栈内存所指向
例如:多个栈内存指向相同的堆内存

public class ArrayDemo{ 
    public static void main(String[] args) { 
        int[] x = null ;
        int[] temp = null ; // 声明对象
        x = new int[3] ;
        System.out.println(x.length) ; 
        x[0] = 1 ; // 数组第一个元素 
        x[1] = 2 ; // 数组第二个元素 
        x[2] = 3 ; // 数组第三个元素 
        for (int i = 0; i<x.length ; i++) { 
            System.out.println(x[i]) ; // 通过循环控制索引下标更改 
        }
        temp = x ; //如果要发生引用传递,不要出现[] 
        temp[0] = 55 ; // 修改数据
        System.out.println(x[0]) ; 
    }
}

在这里插入图片描述
引用传递的内存分析都是类似的:同一块堆被不同的栈内存指向.
内存分为两部分:
栈内存:方法中的局部变量,方法的形参,引用
堆内存:存放数组内容,类对象内容(共享内存)

注:给主方法使用,方法的形参引用
引用传递:多个栈内存共享(指向)一块堆内存地址
3.数组静态初始化
在声明数组同时捋数组内容赋值.
数组长度依然固定,长度为给的值的个数
完整格式:推荐使用
数据类型[ ] 数组名称 =new 数据类型[ ] {值1,值2,值3…}
eg:采用静态初始化定义数组

public class ArrayDemo{ 
    public static void main(String[] args) { 
        int[] x = {1,2,5,55,555,223,45545,666465,6443} ; // 静态初始化定义数组 
        System.out.println(x.length) ; 
        for (int i = 0; i<x.length ; i++) { 
            System.out.println(x[i]) ; 
        }
    }
}

简化格式:
数据类型[] 数组名称 = {值1,值2,值3…}
匿名数组:没有任何栈内存指向的数组空间(没起名字)

2.二维数组(表格)[了解]
定义:
动态初始化:
数据类型[ ] [ ] 对象数组 = new 数据类型[行个数][列个数] ;
静态初始化:
数据类型[][] 对象数组 = new 数据类型[][]{{值,值,…},{值,值,…},…} ;
eg:定义了一个二维数组

public class ArrayDemo{ 
    public static void main(String[] args) { 
         // 数组并不是等列数组 
         int[][] data = new int[][] { 
            {1,2,3},{4,5},{6,7,8,9}
         };
          // 在进行输出的时候一定要使用双重循环 
          for (int x = 0; x<data.length ; x++) { 
            for (int y = 0; y<data[x].length ; y ++) { 
                System.out.println("data{"+x+"]["+y+"]="+data[x][y]+"、") ;
            }
            System.out.println(); 
        }
    }
}

3.数组与方法的相互操作(重点)
数组是引用传递
a.方法接收数组
b.方法返回数组
c.方法修改数组

在这里插入图片描述
a.方法接收数组

public class ArrayDemo{
    public static void main(String[] args) { 
        int[] data = new int[] {1,2,3,4,5} ; 
        printArray(data) ; // 其效果等价于 int[] temp = data ; 
    }
    public static void printArray(int[] temp) { 
        for (int i = 0 ; i<temp.length ; i++) { 
            for (int i = 0 ; i<temp.length ; i++) { 
        }
    }
}

b.方法返回数组

public class ArrayDemo{
    public static void main(String[] args) { 
        int[] data = init() ; 
        printArray(data) ; 
    }
     // 定义一个返回数组的方法 
     public static int[] init(){
        return new int[] {1,2,3,4,5} ; // 匿名数组 
     }
     public static void printArray(int[] temp) { 
        for (int i = 0 ; i<temp.length ; i++) {
            System.out.println(temp[i]) ; 
        }
    }
}

c.方法修改数组

public class ArrayDemo{
    public static void main(String[] args) { 
        int[] data = init() ; 
        bigger(data) ;
        printArray(data) ; 
    }
     // 定义一个返回数组的方法 
     public static int[] init(){
        return new int[] {1,2,3,4,5} ; // 匿名数组 
     }
     // 将数组中每个元素的值扩大5倍 
     public static void bigger(int[] arr){ 
        for (int i = 0 ; i<temp.length ; i++) {
            arr[i]*=5 ; // 每个元素扩大5倍 
        }
    }
    public static void printArray(int[] temp) { 
        for (int i = 0 ; i<temp.length ; i++) { 
            System.out.println(temp[i]) ; 
        }
    }
}

4.Java对数组支持
a.数组排序
java.untl.Array.sort(数组名称):支持所有基本数据类型,默认为升序排序,内部使用双轴快速排序.
b.数组拷贝
数组部分拷贝:将一个数组的部分内容替换为另一个数组的部分内容(必须是连续的)
● 数组拷贝
System.arraycopy(源数组名称,源数组开始点, 目标数组名称,目标数组开始点,拷贝长度);
目标数组A: 1、2、3、4、5、6、7、8、9 源数组B: 11、22、33、44、55、66、77、88、99 替换后: 1、55、 66、77、5、6、7、8、9

public class ArrayDemo{
    public static void main (String [] args){
        int[] dataA = new int [] {1,2,3,4,5,6,7,8,9};
        int[] dataB = new int[]{11,22,33,44,55,66,77,88,99} ; 
        System.arraycopy(dataB,4,dataA,1,3) ;
        printArray(dataA) ; 
    }
    public static void printArray(int[] temp) {
        for (int i = 0 ; i<temp.length ; i++) { 
            System.out.println(temp[i]) ; 
        }
        System.out.println() ; 
    }
}

数组全拷贝
类集动态扩容使用的就是此方法
java,util,Arrays,copyOf(源数组名称,新数组长度):
int[ ] newDate

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值