标签:
------- android培训、java培训、期待与您交流! ----------
数组
同一种类型数据的集合,其实数组就是一个容器。
数组的好处是可以自动给数组中的元素从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;
}
十进制--》二进制的转换
public static void toBin(int num){
StringBuffer sb=new StringBuffer();//存储数据的一个容器;
while(num>0){
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reserve());//对容器中的数据进行反转打印。
}
十进制——》十六进制
public static void toHex(int num){
StringBUffer sb=new StringBuffer();
for(int i=0;i<8;x++){
int temp=num&15;
if(temp>9)
sb.append((char)(temp-10+‘A‘));
else
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
查表法:将所有的元素临时存储起来,建立对应关系
每次将&后的值作为索引去查建立好的数组表,就可以找对应的元素。这样就比每次进行运算简单的多。
public static void toHex(int num){
char[]chs={‘‘,‘‘,‘‘,‘‘,‘‘}
char[]arr=new char[8];//定义一个存储数组用来存储查找到的元素。
int pos=arry.length;//定义一个flag作为脚标指针对应数组元素。
while(num!=0){
int temp=num&15;
arry[--pos]=chs[temp];
num=num>>>4;
}
for(int x=pos;x<arry.length;x++){
System.out.print(arry[x]+",");
}
}
二维数组
矩形数组
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];
}
}
标签:
原文地址:http://www.cnblogs.com/ss561/p/4576280.html