数组,这些你了解吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组,这些你了解吗?相关的知识,希望对你有一定的参考价值。

什么是数组?

      同一种类型数据的集合,也就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器。


数组的本质:

    就是去申请一串连续的内存空间,这个对象arr就指向这个这串内存单元的第一个值


数组的好处:

    当我们需要求1000个学生的平均分的时候,不可能去找1000个变量赋值,这样可以,只不过太过于麻烦,于是,引进来了数组,它能给存进来的数据进行自动编号,注意编号从零开始,方便操作这些数据。


数组的声明大致分为两种:


    ①声明数组的同时,指定它的长度

    ②声明数组的同时,指定里面的值

比如:

    ①int arr[] = new int[10];指定数组长度为10

    ②int arr[] = {1,2,3,4,5}指定里面的值

二维数组的声明和一维数组其实都一样,只是多了一个索引值。

    ①int arr[][] = new int[10][10];

    ②int arr[][] = {{1,2,3,4,5},{1,2,3,4,5}};


     1)数组里面存的都是同一类型数据的集合

           a. 即可以是基本类型,也可以是对象类型;

           b. 数组中的每个数据为元素;

    2) 数组是一个对象,成员是数组长度和数组中的元素;
    3) 声明了一个数组变量并不是创建了一个对象;


数组的遍历:


    我们知道拿到数组里的值,其实就是把它的下标依次改变就行了,下标从0开始,所以,我们可以通过for循环去遍历数组、或者foreach(也叫增强for循环)去遍历,其遍历的方式为:

拿一维数组举例:

     int arr[] = {1,2,3,4,5};(1)for(int i = 0;i<arr.length;i++){

        System.out.println(arr[i]);

    }(2)for(int i:arr){

        System.out.println(i);

    }


    当我们的数组中没有值时,它们都有默认值。

    下面是对应的默认值:

          byte/short/int/long      0
          float                            0.0f
          double                       0.0d
          String                        null
          char                          'u0000'

          boolean                    false


放大数组:


    怎么把一个数放到一个指定长度数组里,可是这个数组里都有值,没地方去存,可以先将这个数组进行放大,通过arr =Arrays.copeOf(arr,arr.length+1)此时的arr已经进行了长度+1,并最后一位有个初值0,然后可以通过fill进行填充


复制数组copyOf(arr,int newlenth)

数组查询 binarySearch(Object[]arr,Object key)使用的前提: 数据排好序

int a = Arrays.binarySearch(arr,3);

如果存在多个值,查询的时候会从前往后一次查找,直到找到一个这个值为止,后面还有也不会继续查找。

给数组从小到大进行排序

Arrays.sort(arr);


数组的排序分为两种:


①冒泡排序


     相隔的数去做比较,大的像后冒泡,通过一直去循环,最后小的都在前面,大的在后面。

int arr[] ={7,5,6,2,4,3,1};//声明一个数组
for (int i = 1;i<arr.length;i++){//循环数组中的所有元素
    int index=0;//声明变量用来接收较大的那个下标
    for (int j = 1;j<=arr.length-i;j++){
            if (arr[j] > arr[index]){//如果arr[j]大于arr[index] 进入判断
                index = j;//把j 赋值给 index
            }
        }
    int midd = arr[index];//两个值去交换,需要一个中间值midd
    arr[index] = arr[arr.length-i];//arr[index]就是最后一个元素
    arr[arr.length-i]=midd;
}


②选择排序


    拿到第一个数依次和后面所有的值作比较,如果小于则交换位置,最后找到第一个最小值,然后再以此类推,完成排序。

int min = 0;
for(int i =0;i<arr.length;i++){
    int index = i;
    for(int j =i+1;j<arr.length;j++){
        if(arr[index]>arr[j]){
            index = j;
        }
    }
    min = arr[index];
    arr[index] = arr[i];
    arr[i] = min;
}


以上是关于数组,这些你了解吗?的主要内容,如果未能解决你的问题,请参考以下文章

刷题之前这些东西你了解吗?

有人可以在快速数组中给出“如果不存在则追加”方法的片段吗?

你真的了解数组吗?

每天都在用 Map,这些核心技术你知道吗?

你真的了解js伪数组吗?深入js伪数组

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]