Java——数组

这篇博客详细介绍了Java中的一维数组和二维数组的使用,包括基本语法、初始化、内存分析、数组拷贝以及打印方法。文章探讨了数组的默认值、越界异常、for-each遍历以及深拷贝和浅拷贝的概念,并提供了一个二分查找的递归算法练习题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维数组:

基本语法:
  • 动态初始化:
    数据类型[] 数组名称 = new 数据类型[]{初始化数据};

  • 静态初始化:
    数据类型[] 数组名称 = {初始化数据};

	int[] arr = new int[]{1, 2, 3};
	int[] arr = {1, 2, 3};
  • 定义数组后没有初始化,默认值为0;

  • 数组中如果是引用类型,默认值为null;

  • new 关键字:产生一个对象;

  • “引用”:用来存放对象的地址;

  • 数组越界在运行期间会发生数组越界异常;

打印数组:
  • 获取数组长度:
System.out.println(arr.length);
  //这里的length不是方法,是一个属性
  • for-each遍历数组:
for(表达式1:表达式2){
						
					}

for-each和for循环遍历数组的区别:for-each不能够通过下标访问数组

  • 字符串形式打印数组:
System.out.println(Arrays.toString(数组名));
 //将数组以字符串形式输出

(Arrays方法在import.java.util.Arrays包中)

Java中数组的内存分析

JVM

  • Java虚拟机栈:局部变量;
  • 本地方法栈:native方法的局部变量—底层由c/c++实现;速度快;
  • 程序计数器:下一条执行指令的地址;
  • :对象;new关键字修饰;
  • 方法区:静态变量、类的信息;
  • 常量池:作用——>存放字符串常量;(JDK 1.7 之前,常量池在方法区中;JDK 1.7 开始,常量池在堆中)
null:是所有引用类型的初始值
  • 空指针异常:
	 int[] array = null;     //长度为0
	 System.out.println(array.length);
	 String str = "hello";
	 System.out.println(str.length());    //这里的length是一个方法;
数组的拷贝
  • for 循环
  • System.arraycopy(原数组名,0,目的数组名,0,原数组长度);
  • 目的数组名 = Arrays.copyOf(原数组名,array.原数组长度);
    后两者的区别和联系:
    arraycopy是一个被native修饰的方法;
    Array.copyOf内部调用了arraycopy方法;
    arraycopy速度更快;
  • 目的数组名 = 原数组名.clone();

eg:

public static void main(String[] args){
        int[] array = {1,2,3,4,5,6};
        int[] array2 = new int[array.length];
        for(int i = 0;i < array.length;i++){
            array2[i] = array[i];
        }
        //数组拷贝:
//        System.out.println(Arrays.toString(array2));
//        System.arraycopy(array,0,array2,0,array.length);
        array2 = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(array2));
    }
  • 深拷贝:如果原数组中存放的是简单类型,即为深拷贝;
  • 浅拷贝:如果原数组中存放的是引用类型,即为浅拷贝;
这是一道练习题

用Java语言实现二分查找的递归算法

public static int binarySearch(int[] array,int key,int left,int right,int mid){
        while(left > right){
            return -1;
        }
        mid = (left+right)/2;
        if(key<array[mid]){
                return binarySearch(array,7,left,mid-1,(left+right)/2);
            }else if(key == array[mid]){
                return mid;
            }else{
                return binarySearch(array,7,mid+1,right,(left+right)/2);
            }
    }

    public static void main(String[] args){
        int[] arr = {1,2,3,4,5,6,7,8,9};
        int ret = binarySearch(arr,7,0,arr.length-1,arr.length/2);
        System.out.println(ret);
    }
}

二维数组:

基本语法:
  • 数据类型[][] 数组名称 = new 数据类型 [行数][列数]{初始化数据};
打印数组:
System.out.println(Arrays.deepToString(array));
  
  //为了防止数组越界异常,通常用下面的方式打印不规则二维数组;
  for (int row = 0; row < arr.length; row++) { 
	for (int col = 0; col < arr[row].length; col++) { 
		System.out.printf("%d\t", arr[row][col]); 
	} 
	System.out.println(""); 
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值