JAVA-语言基础-数组的定义、和应用

1、   数组:

1)   定义:同一类型的多个连续数据的存储容器 ---  大小固定,下标从0—length-1

【数组的本质是栈中的一个引用指向堆内存中的连续存储数据的空间,所以数组名存储的是堆中数组的存储地址】

格式:          a)  数据类型[]  数组名 = new  数据类型[长度];

             b)  数据类型[]  数组名 = new 数据类型[ ]{1,2,3,4,5,9……};

             c)  数据类型[]  数组名 = {1,2,3,4,5,6……};  

//注:C方法是定义数组和初始化同时操作 ,而简化的写法

格式差别:a) 编译时期并不确定具体的元素,称之为动态初始化,初值为0,可拆分

             b)c)编译时就确定了具体的元素,称之为静态初始化b)可拆分c)不可拆分

【注意】中括号放前放后有差别的,如果[ ]紧跟数据类型,数据之后定义的引用一定是一个数组类型。[ ]紧跟数组名。仅限于当前引用是个数组,而不影响其他的变量。建议放在数据类型后

1)  主要应用:这里做简单介绍

a)   获取数组元素:遍历

b)     获取数组长度:int[] arr = new int[10];    arr.length 的结果为10

c)     数组的遍历:1.转换为遍历下标,for(int i=0 ; i<arr.length ; i++){遍历}

2.增强for循环

for(int i:arr){   //增强for循环只能做打印,不能改变原来数组的值

              System.out.println(i);

    }

    3. 在打印数组时,可以将数组转换为一个字符串进行输出,格式如下:

String str = Arrays.toString();  将数组转化为字符串,但是在别忘了importjava.util.Arrays;

d) 获取最值(最大或最小):遍历获取就可以了,这里不做多说

e)          排序:              

    1.冒泡排序: 比较轮数:length-1           次数length-i

    比较次数:(n-1)(n-i) = n^2 –(i+1)*n +i ;--->最高阶—>时间复杂度:O(n^2)

    2.选择排序:比较次数:(n-1)(n-i)               --à时间复杂度:O(n^2)

                   3.内置方法:Arrays.sort( 数组名 );      从小到大排序  快排(O(logn))

f)          数组的反转:首尾交换      ---交换到数组长度的一般就可以了

g) 数组的查找:第一次找到的位置      二分法

int[]arr = {0,1,2,3,4,5,6,7,8,9,10};

              System.out.println(Arrays.toString(arr));

              int n = 10;

              int max = arr.length-1;

              int min = 0;

              int mid = (max+min)/2;

              while(arr[mid] != n){

                       if(arr[mid]>n){

                                 min = mid+1;

                       }else if(arr[mid]<n){

                                 max = mid-1;

                       }

                      

                       if(min > max){   // have not found

                                 mid = -1;

                                 break;

                       }

                       mid = (max+min)/2;

              }

             System.out.println(mid);

h)          数组的复制以及扩容:

    System.arraycopy();数组的复制

    Arr = Arrays.copyOf(arr , arr.length+1);       多出来的位置补0,扩容后地址会变,本质就是复制为其他数组

2、内存:数组存储过程:

内存划分:栈、堆、方法区

1)栈内存:用于存储变量的,变量在定以后存入栈内存,而栈内存不会给变量自动赋值,变量用完后会立即从栈内存中释放(过河拆桥的特点)

2)堆内存:存储的是对象,堆内存会给每个对象中的每个位置一个默认值,不允许每个位置是无值状态。对象在使用完成后会在不定的某个时刻被回收。

byte、short、int-à0; long-à0L ;  floatà0.0F   ; double ->0.0

char-à”\u0000”(U16编码,2位)     boolean-àfalse            引用类型 -ànull

数组名内存储的数据:

栈和堆区别:栈不会自动赋值,堆会,栈会立即回收,堆不会

3)数组的整体赋值,赋值的是地址,如果访问的元素下表越界,会出现异常

4)二维数组: 将一维数组看作元素,放入一个数组中

int[] [] arr  =  newint[3][];    或者 int [] []  arr = new int [3][5];

或者int [][] arr ={{1,2,3},{4,5,6},{7,8,9}}; 大小为3的二维数组

增强for循环:

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

                        for(int[] i:arr){

                                      for(int j:i){

                                                    System.out.println(j);

                                      }

                        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值