数组
- 首先要声明数组变量才能使用如dataType[] arrayRefVar;
- java语言中使用new操作来创建数组,如dataType[ ] arrayRefVar = new dataType[arraysize]
- 数组通过索引访问,索引从0开始
内存分析
-
堆:存放new的对象和数组;可以被所有的线程共享,不会存放别的对象引用
-
栈:存放基本变量类型(包括变量的具体数值;声明数组时先在栈中生成一个空间存放带名称的数组);引用变量的对象(会存放这个)
-
方法区:可以被所有的线程共享;包含了所有的class和static变量
-
声明数组时(int[] = array)先在栈中生成一个空间存放带名称的数组
-
创建数组时(array = new int[10]),栈中的数组前往堆中开辟了一个分为十小份的内存空间。
-
给数组中的元素赋值(num[0] =1),堆中的内存空间才被赋值
-
不能越界输出,数组下标越界java.lang.ArrayIndexOutOfBoundException
三种初始化
- 静态初始化:没有事先给定空间,赋值几个就是几个空间
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
- 动态初始化:先设置了一定的空间
int[] a = new int[10];
a[0] = 1;
a[1] = 2;
数组的默认初始化:数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中每一个元素也按照实例变量同样的方式被隐式初始化,即创建int[10]时,其中int[0]到int[9],均被赋值,其值为0
数组的四个基本特点
- 长度确定,创建后不可更改
- 元素必须是相同类型
- 数组中元素可以是任何类型,包括基本类型int等和引用类型Man等
- 数组变量属于引用类型,数组也可以看成对象
- 数组本身就是对象,java的对象存储在堆中,因此数组无论保持原始类型还是其他对象类型,数组对象本身是在堆中的,数组元素相当于对象的成员变量
- 数组边界,合法区间:[0,length-1] java.lang.ArrayIndexOutOfBoundException
数组的使用
- For-Each循环:arrays.for
- 数组作方法入参
- 数组作返回值
- 普通for循环
多维数组
int[][] array = {{1,2},{2,3},{3,4},{4,5}};//int[4][2],四行两列/*1,2 array[0]2,3 array[1]3,4 array[2]4,5 array[3]*/
冒泡排序(八大排序中最出名的)
嵌套循环中,算法的时间复杂度为O(n2)