1.数组
同一种类型数据的集合,其实数组就是一个容器。
数组的好处是可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1
元素类型[]数组名=new 元素类型[元素的个数或者数组的长度]
格式2
元素类型[]数组名=new 元素类型[]{1,2,3}这种格式为数组的静态初始化
元素类型[]数组名={1,2,3}
内存结构
java程序在运行时,需要在内存中分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
数组和对象,通过new建立的实例都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
以及方法区,本地方法区,寄存器三种共五种内存空间。
对于引用类型变量,变量实体是存在堆内的,当变量被引用赋值的时候是将该变量的内存地址赋予到局部变量上。
对于 int []arry=new int[3];
前半部分是定义一个数组类型的变量,存储在栈内存中,后面的new 语句是声明一个引用型变量,在堆内存中开辟内存,=将堆内存中的内存地址赋予栈内存里的数组类型供其引用。当两个数组类型变量同时指向一个引用类型变量时,为其中一个数组类型变量赋值,另一个也会跟着被重新赋值。每new一次就新建一个引用型变量,。
数组中常见的问题
1空指针异常,2引用超出范围
数组中常见操作
遍历
int []arry={1,2,3} public static void printArry(arry []) { for(int i=0;i<arry.length;i++){ if(i!=arry.length-1) System.out.println(arry[i]+";"); else System.out.println(arry[i]); } }
获取最值
public static void getMax(int []arry){ int max=0; for(int i=0;i<arry.length;i++){ if(arry[i]>arry[max]) arry[max]=arry[i]; } return arry[max]; } }
选择排序
public static void selectSort(int[]arry){ for(int x=0;x<arry.length-1;x++){ for(int y=x+1;y<arry.length;y++){ if(arry[x]>arry[y]){ int temp=arry[x]; arry[x]=arry[y]; arry[y]=temp; } } } }
冒泡排序
public static void selectSort(int[] arry){ for(int x=0;x<arry.length-1;x++){ for(int i=0;i<arry.length-x-1;i++){ if(arry[i]>arry[i+1]){ int temp=arry[y]; arry[y]=arry[y+1]; arry[y+1]=temp; } } } }
以上数组位置置换功能的抽取
public static void swap(int []arry,int a ,int b){ int temp=arry[a]; arry[a]=arry[b]; arry[b]=temp; }
数组的查找
public static int search(int []arry,int key){ for(int i=0;i<arry.length;i++){ if(arry[i]==key){ return i; } } return -1;//数组中不存在的时候返回-1 }
对于有序数组的折半查找
public static int Search(int[]arry,int a){ int min=0,max=arry.length-1; int mid=(arry.length-1)/2; while(arry[mid]!=a){ if(arry[mid]>a){ max=mid-1; }else if(arry[mid]<a){ min=mid+1; } if(min>max) return -1; mid=(max+min)/2; } return mid; }
二维数组
矩形数组
int [][]arry=new int[3][2]
锯齿形数组
int [][]arry=new int[2][]
arry[0]=new int[3];
arry[1]=new int[4];
二维数组的求和
int sum=0; for(int x=0;x<arry.length;x++){ for(int y=0;y<arry[x].length;y++){ sum+=arry[x][y]; } }