数组的定义
概念
同一种类型数据的集合,其实数组就是一个容器。
数组的好处
可以自动给数组中的元素从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 static void main(String[] args)
{
// TODO Auto-generated method stubint[] 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建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不再被使用,会在不确定的时间内被垃圾回收器回收
方法区,本地方法区,寄存器