java数组

为什么要有数组?

      之前在定义数据的时候,大部分都是用变量来存储数据。如果我们的程序中出现大量的数据怎么办?连续输入多个数字,连续输入多个坐标点,一般而言会创建多个变量存储这些数据,显得比较麻烦。如果变量基本上类型是一样的,那我们就可以用一个容器将所有的数字进行管理。类似于字符串,字符串其实就是若干个字符的容器而已,“abc”可以通过索引/角标来获取其中某一个字符。[1,2,3,4,5]类似字符串能够也可以通过索引/角标来获取其中某一个数字呢?那么这个容器我们称之为数组。

数组的优点:

数组主要解决多变量多数据的存储问题,方便程序后期统一维护操作数据。

数组的定义:

数组就是一系列空间大小相等且地址连续的一片存储空间。

空间大小相同的原因:就是为了方便统一维护我们的数据,必须得保证数据之间的类型是一样的。(多个同类型的变量空间连在一起组成的结构叫数组)

地址连续:就是为了方便统一操作我们的数据。(见数组内存图)

数组的特征:

  • 数组存在于堆内存中,但凡在堆中存储的数据都称之为 对象(整数类型默认0  浮点类型默认0.0   布尔类型默认false    引用数据类型(对象)默认null)
  • 数组提供角标来访问数组当中的元素(下标从0开始)
  • 数组变量存的就是数组在堆内存中首元素的地址
  • 数组通过角标来访问元素的具体计算方式是 所要访问数据的地址=首元素地址+角标*数据类型大小
  • 数组一旦定义下来,其长度不可改变;数组中有几个地址?就看数组有几个元素空间<==>数组的长度

数组内存图

数组的创建:

  1. 数据类型[] 数组名=new 数据类型[长度];
  2. 数据类型[] 数组名=new 数据类型[]{1,2,3,4,5};
  3. 数据类型[] 数组名={1,2,3,4,5};

数组的常见错误:

  • ArrayIndexOutOfBoundsException 数组角标越界
  • NullPointerException 空指针异常

数组的基本操作:

  • 遍历
class demo1{
    public static void main(String[] args){
        int []array1={1,2,3,4,5,6};
        for(int i=0;i<array1.length){
            System.out.println(array1[i]);
        }
    }
}
  • 赋值
import java.util.*;
class demo2{
    public static void main(String[] args){
        Scanner str=new Scanner(System.in)
        int array1=new int[10];
        for(int i=0;i<array1.length;i++){
            int num=str.nextInt();
            array1[i]=num;
        }
    }
}
  • 查找最值
/**查找数组里面的最大值 */
class demo1{
    public static void main(String[] args){
        int[] arr={10,9,7,5,99};
        int max=arr[0];
        int min=arr[0];
        for(int i=0;i<arr.length;i++){
            if(arr[i]>max){
                max=arr[i];
            }
        }
        System.out.println("最大值是:"+max);
    }
}

数组的查找:

  • 线性查找
import java.util.*;
class demo2{
    public static void main(String[] args){
        Scanner str=new Scanner(System.in)
        int array1=new int[10];
        for(int i=0;i<array1.length;i++){
            int num=str.nextInt();
            array1[i]=num;
        }
        System.out.println("请输入要查找的数:");
        int s=str.nextInt();
        for(int j=0;j<array1.length;j++){
            if(s==array1[j]){
                System.out.println("这是这个数组中的第"+(j+1)+"个数")
            }
        }
    }
}
  • 二分查找
/**二分查找法 */
import java.util.Scanner;
class demo2{
    public static void main(String[] args){
        Scanner str=new Scanner(System.in);
        System.out.println("请输入要查找的数:");
        int num=str.nextInt();
        int []array={12,17,21,32,38,41,46,49,50,51,59,60};
        int left=0;
        int right=array.length-1;
        boolean flag=false;
        while(right>=left){
            int mid=(left+right)/2;
            if(num==array[mid]){
                System.out.println("这是数组里面的第"+(mid+1)+"数!");   
                flag=true;
                break;
            }else if(num<array[mid]){
                right=mid-1;
            }else{
                left=mid+1;
            } 
        }
        if(flag==false){
            System.out.println("没有查找到这个数!");
        }
    }
}

  • 斐波那契查找

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值