Java基础深化:数组

数组概述及特点

数组的定义:

数组是相同类型数据的有序集合。

数组的基本特点

1:其长度为确定的,数组一旦被创建,其大小便不可改变
2:其元素必须为相同类型。
3:数组中的元素可以是任何数据类型
4:数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的

创建数组和数组的初始化

声明数组的方法

type[] arr_name;(推荐使用这中方式)
type arr_name[];
例如://数组声明的几种方式 int arry[]; int[] arry1;
注意
1:声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),例如:int a[5]; //非法
2:声明一个数组的时候并没有数组被真正的创建。
3:构造一个数组,必须指定长度。

构造数组的几种方式

1:type[] 变量名=newtype[数组中元素的个数];

int arry3[]=new int[4];

2:type 变量名[] =newtype[]{元素列表}

        int arry4[]=new int[]{};
        int arry5[]={};
        int arry6[]={1,2};

数组的长度

Java中的每个数组都有一个名为length的属性,表示数组的长度。length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。
范例代码

 //length
        System.out.println(array3.length);

for循环遍历数组

代码:

 //for循环遍历数组
        array2= new int[]{1, 2};
        for (int i=0;i<array2.length;i++){
            System.out.print(array2[i]+" ");
        }

增强for循环遍历数组

代码:

 //增强for循环遍历数组
        for (int a:array2){
            System.out.print(a+" ");
        }

数组的比较

使用Arrays的equals方法

//使用Array.equals方法比较数组
        array= new int[]{1, 2, 3};
        System.out.println(Arrays.equals(array, array2));

数组的拷贝

 //数组的拷贝,指定长度以及起始结束位置[0,3)
       int[] a=Arrays.copyOfRange(array2,0,3);
        System.out.println(Arrays.toString(a));

查找

二分法查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素

public static int  test(int[] array,int num){
        int startIndex=0;
        int endIndex=array.length-1;
        int midIndex=(startIndex+endIndex)/2;
        while (startIndex<endIndex){
             if (num>array[midIndex]){
                startIndex=midIndex+1;
                midIndex=(startIndex+endIndex)/2;
                 System.out.println("起始位置右移"+"此时中间值为:"+midIndex);
            }
            if (num<array[midIndex]){
                endIndex=midIndex-1;
                midIndex=(startIndex+endIndex)/2;
                System.out.println("起始位置左移"+"此时中间值为"+midIndex);
            }
            if (num == array[midIndex]){
                num=array[midIndex];
                startIndex=midIndex;
                endIndex=midIndex;
                System.out.println("结束时此时中间值为:"+midIndex);
            }
        }
                return midIndex;
    }

排序

冒泡排序

从位置0开始,当前位置数字和后面位置的数字进行比较如果前面的大于后面,数据交换将位置向后移动一位,重复第一个过程,直到最后一个重复刚才的过程

动图演示
在这里插入图片描述

 public  static  void  tset(int[] a){
        int index=a.length-1;
       for (int i=0;i<index;i++){
           for (int j=index-i;j>0;j--){
               for (int y=0;y<j;y++){

                   if (a[y]>a [y+1]){
                       int temp=a[y];
                       int temp1=a[y+1];
                       a[y]=temp1;
                       a[y+1]=temp;
                   }
               }
           }
       }
    }

选择排序

假设第一个数字就是最大数字,记录他的索引然后和后面的数字进行比较,如果后面的数字大于最大数字,重新记录新数字的索引直到最后一个数字,然后将最大数字索引与最后一个数字进行交换

动图演示
在这里插入图片描述


    public  static  void test(int[] a){
        for (int i=0;i<a.length-1;i++){
            for (int j=0;j<a.length-i-1;j++){
                if (a[j]>a[j+1]){
                    int temp=a[j];
                    int temp1=a[j+1];
                    a[j]=temp1;
                }
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值