Java基础 数组_排序,查找,进制转换,内存结构

来源:互联网 发布:suse linux yum配置 编辑:程序博客网 时间:2024/06/06 07:03


数组的定义

概念

同一种类型数据的集合,其实数组就是一个容器。

数组的好处

可以自动给数组中的元素从0开始编号,方便操作这些元素

格式1:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

示例:int[] arr=new int[5];


格式2:

元素类型[] 数组名 = new 元素类型[]{元素,元素,...};

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

int[] arr={3,5,6,7};


取数组长度(.length属性):

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

System.out.println(arr.length);


//取数组元素最大最小值

class ArrayTest{

public static void main(String[] args)

{

int[] arr=new int[]{9,7,1,2,3,5,6};//数据

int[] result=null;//结果存放数组

result=getResult(arr);//获取结果

System.out.println("max="+result[0]+",min="+result[1]);//输出最大值和最小值

}

public static int[] getResult(int[] arr)//取结果

{

int[] result=new int[2];//定义一个整型数组 result指向有两个元素的数组对象

int max=arr[0],min=arr[0];//初始化最大值和最小值为数据的第一个元素


for(int i=0;i<arr.length;i++)

{//循环

max=(arr[i]>max ? arr[i] : max);//最大值比较

min=(arr[i]<min ? arr[i] : min);//最小值比较

}

result[0]=max;//填充数组

result[1]=min;

return result;//返回结果

}



}

Arrays.sort();//Java中自带的排序函数. import java.util.*;

//数组元素排序(选择排序)第一圈最值出现了第一位

class ArrayTest2

{

public static void main(String [] args)

{

int[] arr={6,4,7,8,3,1,9};//定义数组

sortArr(arr);//进行从小到大的排序

for(int i=0;i<arr.length;i++)

{//依次打印数组元素

System.out.print(arr[i]+",");

}

}

public static void changeSite(int[] arr,int s1,int s2)

{//位置置换函数独立出来

int tmp;

tmp=arr[s1];

arr[s1]=arr[s2];

arr[s2]=tmp;

}

public static void sortArr(int[] arr)

{

int tmp=0;

for(int j=0;j<arr.length;j++)

{//从角标为j的元素开始循环

for(int i=j+1;i<arr.length-1;i++)

{//和角标大于 j 的元素依次对比一次,最后一个不用对比

if(arr[i]<arr[j])//发现比j元素小,就交换值

{

changeSite(arr,i,j);

/*tmp=arr[i];

arr[i]=arr[j];

arr[j]=tmp;

*/

}

}

}


}

//冒泡排序,第一圈最值出现了最后位

public static void sortArr2(int[] arr)

{//冒泡排序

int tmp=0;

for(int i=arr.length;i>0;i--)

{

for(int j=0;j<i-1;j++)

{

if(arr[j]>arr[j+1])

{

changeSite(j,j+1);

/*

tmp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=tmp;

*/

}

}

}

}

}


折半法查找 

public class ArrayTest {


public static void main(String[] args) 

{

// TODO Auto-generated method stub
int[] arr=new int[]{0,1,2,3,4,5,6,7,8,9};
System.out.println(halfSearch(arr,10,arr.length-1,0));
System.out.println(halfSearch(arr,-2));
}

public static int halfSearch(int[] arr,int target)

{

int max,min,mid;
min=0;
max=arr.length-1;
mid=(max+min)/2;

while(target!=arr[mid])

{

mid=(max+min)/2;

if(min>max)

{

return -1;
}

if(target<arr[mid])

{//如果大于目标,

max=mid-1;
}

else if(target > arr[mid])

{

min=mid+1;
}
}
return mid;
}

public static int halfSearch(int[] arr,int target,int max,int min)

{

int mid;

mid=(max+min)/2;

if(min>max)

{

return -1;
}

else if(target<arr[mid])

{

max=mid-1;
}

else if(target>arr[mid])

{

min=mid+1;
}

else if(target==arr[mid])

{

return mid;
}
return halfSearch(arr,target,max,min);
}
}


十进制转二进制

class ArrayTest5{

public static void main(String[] args){

toBin(6);

toHex(666);

}

public static void toHex(int num)                   //十进制转十六进制并输出

{

char[] list16={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

int tmp;

StringBuffer sb=new StringBuffer();

for(int i=0;i<8;i++)

{

tmp=num&15;

/*

if(tmp<10){

sb.append(tmp);

}

else{

tmp=(tmp-10)+'A';

sb.append((char)tmp);

}

*/

sb.append(list16[tmp]);

num=num>>>4;

}

System.out.println("0x"+sb.reverse());

}


public static void toBin(int num)                             //十进制转二进制并输出

{

StringBuffer sb=new StringBuffer();

while(num>0)

{

sb.append(num%2);

num=num/2;

}

System.out.println(sb.reverse());

}

}



//优化后的进制转换代码,提取出公用代码作为独立函数。

class ArrayTest6{

public static void main(String [] args)

{

toBin(255);

toBa(255);

toHex(255);

}

/*

十进制-->二进制

*/

public static void toBin(int num)

{

System.out.println(trans(num,1,1));

}

/*

十进制-->八进制

*/

public static void toBa(int num)

{

System.out.println(trans(num,7,3));

}

/*

十进制-->十六进制

*/

public static void toHex(int num)

{

System.out.println(trans(num,15,4));

}

public static String trans(int num,int base,int offset)

{

int pos;

if(num==0){

return "0";

}

char[] chs=new char[]{'0','1','2','3'

,'4','5','6','7'

,'8','9','A','B'

,'C','D','E','F'};


char[] arr=new char[32];

String s="";

pos=arr.length;

while(num!=0)

{

arr[--pos]=chs[num&base];

num=num>>>offset;

}

for(int i=0;i<arr.length;i++)

{

s=s+arr[i];

}

return s;

}

}

内存结构


Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间

进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。


栈内存


用于存储局部变量,当数据使用完,所占空间会自动释放。


堆内存


数组和对象,通过new建立的实例都存放在堆内存中。

每一个实体都有内存地址值

实体中的变量都有默认初始化值

实体不再被使用,会在不确定的时间内被垃圾回收器回收


方法区,本地方法区,寄存器




0 0
原创粉丝点击