黑马程序员--Java基础--02数组

本文介绍了Java中数组的基本概念及应用,包括一维数组和二维数组的声明、初始化及操作方法,并提供了查找和折半查找的具体实现。此外,还详细讲解了几种常见进制之间的转换方法。

----------------------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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值