----------------------Android培训、Java培训、java学习型技术博客、期待与您交流! ----------------------
数组
数组的定义:
同一种类型数据的集合。其实数组就是一个容器,用于存储数据的容器。数组是一种常用的数据结构,它是一组有序数据的集合。数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一的确定数组中的元素。数组中元素可以
是简单的数据类型,也可以是类类型。但要求一个数组中的所有元素的类型必须一致。数组有一维数组和多维数组。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
数组变量声明:
一维数组:
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
实例:int [] arr = new int[8];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,,,,,};
int [] arr = new int[]{2,5,3,7};
int [] arr = {9,3,1,0};
二维数组[][]
格式1:int[][] arr = new int [6][3];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1角标位赋值为56写法是:arr[0][1]=78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int [3];
arr[1] = new int [4];
arr[2] = new int [3];
格式3:int[][] arr = {{3,2,6,3,1}{8.2,43,5,45}}
二维数组有两个一维数组
两个一维数组分别为:
arr[0] = {3,2,6,3,1};
arr[1] = {8.2,43,5,45};
数组Demo
//查找操作
class ArrayTest
{
public static void main(String[] args)
{
int [] arr= new int[]{2,4,5,7,9};//定义了一个一维的int类型数组并初始化为{2,4,5,7,9};
int index=getIndex(arr,3);
int index2=getIndex_2(arr,4);
int index3=getIndex_2(arr,20);
int inde=halfSearch(arr,7);
int inde2=halfSearch_2(arr,8);
//System.out.println("index="+index);
System.out.println("inde="+inde);
System.out.println("inde2="+inde2);
System.out.println("index="+index2+" "+index3);
}
/*
数组中查找操作
*/
public static int getIndex(int [] arr,int a)
{
for (int x=0;x<arr.length ;x++ )
{
if(a==arr[x])
return x;
}
return -1;
}
/*
折半查找,提高效率,但是必须要保证该数组是有序的数组。
*/
public static int getIndex_2(int [] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key)
{
if (key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
/*
折半的第二种方式
*/
public static int halfSearch(int [] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;
}
/*
练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证数组是有序的。
*/
public static int halfSearch_2(int [] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return min;
}
}
内存结构:
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,有时对空间进行了
不同区域的划分,因为每一片区域都有特定的处理方式和内存管理方式。
栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收。
方法区,本地方法区,寄存器。
各进制间转换
//各进制间转换
class ArrayTest2
{
public static void main(String[] args)
{
toBin(6);
toHex(60);
toHex_2(60);
toBin_2(6);
System.out.println();
toBin_3(-6);
System.out.println();
toHex_3(-60);
System.out.println();
toOct(60);
}
/*
十进制转换为二进制
*/
public static void toBin(int a)
{
StringBuffer sb= new StringBuffer();//能够存放数据的容器
while(a>0)
{
sb.append(a%2);//一个个存储数据
a=a/2;
}
System.out.println(sb.reverse());//反向打印数据
}
/*
十进制转换为十六进制
*/
public static void toHex(int num)
{
StringBuffer sb= new StringBuffer();
for(int x=0;x<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());
}
/*
0 1 2 3 4 5 6 7 8 9 A B C D E F==十六进制中的元素。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
查表发:将所有元素临时存出起来,建立对应关系。
每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。
可以通过数组的形式来定义。
*/
public static void toHex_2(int num)
{
char [] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//定义了一个char类型的一维数组并直接初始化
//定义一个临时容器。
char [] arr=new char[8];
int pos=arr.length;
while(num!=0)
{
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
System.out.println("pos="+pos);
//存储数据的arr数组遍历。
for(int x=pos;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}
}
/*
二进制查表发
*/
public static void toBin_2(int num)
{
char [] chs={'0','1'};//定义了一个char类型的一维数组
char [] arr=new char[32];
int pos=arr.length;
while (num!=0)
{
int temp=num & 1;
arr[--pos]=chs[temp];
num=num>>>1;
}
for (int x=pos;x<arr.length ;x++ )
{
System.out.print(arr[x]);
}
}
/*
进制转换优化
*/
/*
十进制转化为二进制
*/
public static void toBin_3(int num)
{
trans(num,1,1);
}
/*
十进制转化为二进制
*/
public static void toOct(int num)
{
trans(num,7,3);
}
/*
十进制转化为二进制
*/
public static void toHex_3(int num)
{
trans(num,15,4);
}
public static void trans(int num,int base, int offset)
{
if(num==0)
{
System.out.println(0);
return ;
}
char [] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char [] arr=new char[32];
int pos=arr.length;
while(num!=0)
{
int temp =num &base;
arr[--pos]=chs[temp];
num=num>>>offset;
}
for (int x=pos;x<arr.length ;x++ )
{
System.out.print(arr[x]);
}
}
}
----------------------Android培训、Java培训、java学习型技术博客、期待与您交流! ----------------------
详细请查看:http://edu.youkuaiyun.com/