初学JavaDay06——数组

初学JavaDay06——数组

一、数组的基础知识

数组用是来存储数据的集合
数组在内存中是如干个大小一致,类型一样,地址连续的存储空间
如何访问数组中的元素?
直接使用角标、数组、下标访问元素
java中内存的分布情况

寄存器
本地方法区:存储操作系统的部分代码
方法区:存储应用程序的代码
栈内存:运行函数代码
堆内存:存储对象的

二、创建数组

格式

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

例如:new sanner中的new是创建对象

三、数组的定义

数据类型[] 数组名=new 数据类型[lenght]
创建一个指定长度的数组,里面没有数据,是默认值(但凡在堆内存中的数据都有默认初始化数值)
eg:int[] arr=new int[5];

//创建一个整形数组(int)且长度为5 然后将这个对象的地址给变量arr arr的

//[]指的一维数组

//arr中存放的第一数字的地址(拿到第一个的地址就可以找到后续的)

四、数组的大小和默认值

当创建数组后,它的元素被赋予默认值。

数值型的基本数据类型为0

char默认值是‘\u0000’

boolean默认值为false

五、如何访问数组?

数组元素可以通过下标访问。数组下标是基于 0的,也就是说,其范围从 0 开始到 数组的长度-1结束。
基本格式:
数组引用交量[下标];
创建数组后,下标变量与正常变童的使用方法相同。

六、数组的初始化语法

Java 有一个简捷的标记,称作数组初始化语法,它使用下面的语法将声明数组、创建数 组和初始化数组结合到一条语句中:
元索类型[] 数进引用变量={值 0,值1, …,值 k}
数组初始化语法中不使用操作符 new。使用数组初始化语法时,必须将声明、创建和 初始化数组都放在一条语句中。将它们分开会产生语法错误。

七、数组的常见处理

1.数组的遍历

public static void bianli(){
        System.out.println("数组的遍历");
        int arr[]={1,2,3,4,5,6};
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" "); //正向的遍历
        }
        System.out.println();
       for(int i=arr.length-1;i>=0;i--){ //逆向的遍历
            System.out.print(arr[i]+" ");
        }
        System.out.println();

2.数组的查找

2.1线性查找

public static void find(){
        System.out.println("数组的查找");
        int arr[]={6,4,8,2,3,1,9,7,5};
        int key=3;
        int index=-1;
        for(int i=0;i<arr.length;i++){   //线性查找(挨个对比)
            if(arr[i]==index){
                index=i;
                break;
            }
        }
        System.out.println(index);
       
2.2二分查找
 arr=new int[]{1,2,3,4,5,6,7,8,9};//二分查找
        key=8;
        int minIndex=0;
        int maxIndex=arr.length-1;
        int midIndex=(minIndex+maxIndex)/2;
        index=-1;
        while(true){
            if(arr[midIndex]>key){
                maxIndex=midIndex-1;
            }else if(arr[midIndex]<key){   //当找到时退出
                minIndex=midIndex+1;
            }else{
                index=midIndex;
                break;
            }
            midIndex=(minIndex+maxIndex)/2;
            if(minIndex>maxIndex){  //当最小的大于最大的时退出(没有相应的数字)
                break;
            }
        }
        System.out.print(index);
    }  

3.数组的扩容

public static void resize(){
        System.out.println("数组的扩容");
        int[] arr=new int[]{1,2,3,4,5};
        int deitSize=-2;//-缩 +扩
        int[] newArr=new int[arr.lenght+deitSize];
        //将原先的数据放入到新数组中
        for(int i=0;i<Math.min(arr.length,newArr.length;){
            newArr[i]=arr[i];
        }
        arr=newArr;//将新的数组重新赋给原数组(也就是新数组改了个名字)
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

4.数组的排序

4.1选择排序
 public static void selectedSort(){
        int[] arr={5,1,3,2,7,4,9,8,6};
        for(int i=0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]>arr[j]){
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
4.2冒泡排序
 public static void bubbleSort(){
        int[] arr={5,1,3,2,7,4,9,8,6};
        //i仅仅表示轮数
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
4.3插入排序
public static void insertSort(){
        int[] arr={5,1,3,2,7,4,9,8,6};
        for(int i=1;i<arr.length;i++){
            int e=arr[i];
            int j=i-1;
            while(j>=0&&arr[j]>e){
                arr[j+1]=arr[j];
                j--;
            }
            arr[j+1]=e;
        }
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值