【JAVA |数组】数组定义与使用、常见的Arrays类介绍

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 
🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈


✨✨ 帅哥美女们,我们共同加油!一起进步!✨✨ 

目录

一、前言

二、数组的创建和初始化

三、数组的使用 

四、数组是引用类型

1.JVM的内存分配

 2.与引用类型变量

 3.null

五、二维数组

六、Java中Arrays类的常用方法

1. Arrays.fill ->填充数组

2. Arrays.sort ->数组排序

3. Arrays.toString ->数组打印

4. Arrays.equals ->比较数组是否相等

5. Arrays.binarySearch ->二分查找法找指定元素的索引值(下标)

6.Arrays.copeOf ->复制代码


一、前言

内存在连续存储的一段空间,相同类型数据的集合


二、数组的创建和初始化

在C语言中数组的创建格式为int arr[ ],但是在JAVA中数组的创建格式为int[ ] arr

创建数组有这几种方法

int[] arrl ={1,2,3,1,1,1,1,1,1,1,1};
int[] arr2 = new int[10];
int[] arr3 = new int[]{l,2,3,5,4,5,9};

  • arr1创建并对其数组进行初始化,指定数组中的元素,前面的方括号空着,JAVA会根据数组中的值自动分配空间
  • arr2是创建一个可以容纳10个int类型元素的数组 
  • arr1和arr3是等价的,可以省略了nrw int[ ]

如果没有对数组进行初始化,数组中元素有其默认值

类型默认值
byte0
short0
int 0
lomg0
float

0.0f

doble

0.0

char/u0000
booleanfalse

如果数组中存储元素类型为引用类型,默认值为null


三、数组的使用 

数组在内存中是一段连续的空间,空间的编号都是从 0 开始的,依次递增,该编号称为数组的下标,数组可以通过 下标访问其任意位置的元素
int[]arr =new int[]{10,20,30,40,50};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);

下标从 0 开始,介于 [0, N )之间不包含 N N 为元素个数,不能越界,否则会报出下标越界异常。

在打印数组的时候,在JAVA相比于C语言可以这样实现

public class Test
    public static void main(String[] args){

        int[]array =new int[]{10,20,30,40,50};

        for(int i=0;i < array.length;i++){
            System.out.println(array[i]);
        }
    }
}

在数组中可以通过 数组对象.length 来获取数组的长度 

也可以使用 for-each 遍历数组,和上述方法实现的结果一样的

int[] array =new int[]{10,20,30,40,50};

for (int x:array){
    System.out.println(x);
}

for-each for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错. 


四、数组是引用类型

1.JVM的内存分配

在JAVA中,JVM 也对所使用的内存按照功能的不同进行了划分

  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表操作数栈动态链接返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
  • (Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} )堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 . 方法编译出的的字节码就是保存在这个区域

 2.与引用类型变量

大家来看下面这段代码

int a = 10;
int b = 20;

int[] arr = new int[]{1,2,3};

a b 是内置类型的变量,其空间中保存的就是给该变量初始化的值;array是数组类型的引用变量

,相当于C语言中的指针用来接受数组的首地址。

引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该
地址,引用变量便可以去操作对象。

 3.null

null Java 中表示 " 空引用 " , 也就是一个不指向对象的引用 . 类似于 C 语言中的 NULL ( 空指针 ), 都是表示一个无效的内存位置 . 因此不能对这个内存进行任何读写操作. 一旦尝试读写 , 就会抛出 NullPointerException.

五、二维数组

二维数组本质上也就是一维数组 , 只不过每个元素又是一个一维数组,基本语法如下
数据类型 [][] 数组名称 = new 数据类型 [ 行数 ][ 列数 ] { 初始化数据 }

int[][] arrl = new int[3][];
int[][] arr2 = new int[][]{{1,2},{3,4,5},{6}};
int[][] arr3 = {{1}, {2,3}, {4, 5, 6}};

 以上3种方法都是正确的在JAVA中二维数组的行不能省略列可以省略并且在给一个二维数组初始化的时候每一行都要拿花括号围起来(每一行都是一个一维数组),这与C语言中还是有差异的

  • arr1中创建了一个3行的二维数组(3个一维数组所组成的数组)
  • arr2中创建了一个3行的二维数组,每行的大小可以是不一样的
  • arr3中初始化并创建了一个3行的二维数组,每行的大小是不一样的

二维数组的用法和一维数组并没有明显差别


六、Java中Arrays类的常用方法

Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。使用前得包含它的util包

    import java.util.Arrays;

1. Arrays.fill ->填充数组

既能实现对不同数据类型数组进行全部分配,也能实现范围分配

 以int类型举例子

int arr = new int[10];
System.out.println("arr填充前:"+ Arrays.toString(arr));//打印

Arrays.fill(arr,0,3,2);    //将数组arr下标为[0,3)范围内填充
System. out.println("arr第一次填充:"+ Arrays.toString(arr));    //打印

Arrays.fill(arr, 1);    //将数组arr每个元素用1填充
System. out.println("arr第二次填充:"+ Arrays.toString(arr));//打印


2. Arrays.sort ->数组排序

既能实现对不同数据类型数组进行全部排序,也能实现范围排序

 以int类型举例子 

int[] arr = new int{l,5,9,5,4,18,6,66,56};
System.out.println("arr排序前:"+ Arrays.toString(arr));//打印

Arrays.sort(arr);//排序arr整个数组
System.out.println("arr第一次排序后:"+ Arrays.toString(arr)); //打印

Arrays.sort(arr,0,:5);//将数组arr下标为[0,3)范围内排序
System.out.println("arr第二次排序后:"+ Arrays.toString(arr)); //打印


3. Arrays.toString ->数组打印

打印出来数组的内容

 以int类型举例子 

intll arr = new int[]{l,5,9,5,4,18.6.66,56};

System.out.println(Arrays.toString(arr));


4. Arrays.equals ->比较数组是否相等

比较两个数组是否元素相同,并返回对应的布尔值

  以int类型举例子 

int[] arrl = new int[]{l,5,9,5,4,18,6,66,56};
int[] arr2 = new int[]{l,5,9,5,4, 18,6, 66, 56};
int[] arr3 = new int[]{l,2,3,4,5,6,7,8, 9, 10};

System.out.println(Arrays.equals(arrl, arr2));//比较arr1与arr2并且打印
System,out.println(Arrays.equals(arr1, arr3));//比较arrl与arr3并目打印


5. Arrays.binarySearch ->二分查找法找指定元素的索引值(下标)

二分查找使用前需要排序,既能实现对不同数据类型数组进行全部查找,也能实现范围查找

  以int类型举例子 

int[] arr = new int[]{l,2,3,4,5,6,7,8,9,10};

System.out.println(Arrays.binarySearch(arr,9));//在数组范围内查找18的下标

System.out.println(Arrays.binarySearch(arr,0,8,6));//在数组范围[0,8)内查找18的下标

6.Arrays.copeOf ->复制代码

既能实现对不同数据类型数组进行全部复制,也能实现范围复制,同时可以扩容!!

   以int类型举例子 

int[] arrl = new int[]{l,5,9,11,4,18,6,66,56};
int[] arr2 = new int[10];
int[] arr3 = new int[]{8,8,8,8,8,8,8,8, 8, 8, 8, 8};

System.out.println("拷贝前"+Arrays.toString(arr2));//拷贝前
arr2 = Arrays.copyOf(arrl,arrl.length);//将arr1中的arrl. lenght个元素拷贝
System. out.println("第一次拷贝后"+Arrays.toString(arr2));//第一次拷贝后

arr2= Arrays.copyOfRange(arr3,0,5);//将arr3中的[0,5)范围内元素拷贝
System. out. println("第二次拷贝后"+Arrays.toString(arr2));//第二次拷贝后

arr2= Arrays.copyOf(arr2,20);//也可以实现扩容,没有分配数据的地方会拿0填
System. out.println("第二次拷贝后"+Arrays.toString(arr2));//第三次填充后


希望对你有帮助

  • 54
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值