黑马程序员-数组

------- android培训java培训、期待与您交流! ----------
1.数组的定义
同一种类型数据的集合。相当于一个容器。可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式:int[] arr = new int[4];
int[] arr = new int[]{3,4,6,8};
int[] arr = {3,4,6,8};


2.内存结构
java程序在运行时,需要在内存中分配空间。为了提高运算效率,把空间划分成不同区域,每个区域都有特定的处理数据方式和
内存管理方式。
栈内存:用来存储局部变量,变量使用结束后,所占的空间会自动释放。
堆内存:通过new建立的实例都存放在堆内存中,而每一个实例都有一个内存地址以及默认初始化值。如果实例不再被使用的话,
在不确定的时间会被垃圾回收器回收。
 一般数据类型的数组的默认值为null,boolean型数组的默认值是false。


3.数组操作时的两个异常:
ArrayIndexOutOfBoundsException: 数组角标越界异常
NullPointerException:空指针异常


4.数组的遍历
int[] arr = new int[]{3,2,5,9,4,21};
for (int x=0; x<arr.length; x++)
{
	System.out.println("arr["+x+"]="+arr[x]);
}

5. 数组中获取最值
//初始化为元素
int[] arr = new int[]{3,2,5,9,4,21};
int max = arr[0];
int min = arr[0];
for(int x=1;x<arr.length;x++)
{
	if(max<arr[x])
		max = arr[x];//获取最大值
	if(min>arr[x])
		min = arr[x];//获取最小值
}
System.out.println("max="+max+"----min="+min);
//初始化为角标
int[] arr = new int[]{3,2,5,9,4,21};
int max = 0;
int min = 0;
for(int x=1;x<arr.length;x++)
{
	if(arr[max]<arr[x])
		max = x;
	if(arr[min]>arr[x])
		min = x;
}
System.out.println("max="+arr[max]+"----min="+arr[min]);

6.数组的排序
(1)选择排序
public static void selectSort(int[] arr)
	{
		for(int x=0;x<arr.length-1;x++)
		{
			for(int y=x+1;y<arr.length;y++)//外循环每循环一次,就把最小值放到最左边
			{
				if(arr[x]>arr[y])
				{
					int temp = arr[x];
					arr[x] = arr[y];
					arr[y] = temp;
				}
			}
		}
	}

(2)冒泡排序
	public static void bubbleSort(int[] arr)
	{
		for(int x=0;x<arr.length-1;x++)
		{
			for(int y=0;y<arr.length-x-1;y++)//外循环每进行一次,内循环的比较次数就减少一次
			{
				if(arr[y]>arr[y+1])//每次循环,将相邻两个元素进行比较,把大的元素不断右移。
				{
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
				}
			}
		}
	}

//或者
	public static void bubbleSort2(int[] arr)
	{
		for(int x=arr.length-1;x>0;x--)
		{
			for(int y=0;y<x;y++)//外循环每进行一次,内循环的比较次数就减少一次
			{
				if(arr[y]>arr[y+1])//每次循环,将相邻两个元素进行比较,把大的元素不断右移。
				{
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
				}
			}
		}
	}

7.数组的折半查找(数组必须是有序数组)
//第一种方式
	public static int binSearch(int[] arr ,int key)
	{
		int min = 0;
		int max = arr.length-1;
		int mid ;
		while(min<=max)//只要min小于max,继续循环
		{
			mid = (min+max)/2;
			if(arr[mid]!=key)
			{
				if(key>arr[mid])
					min = mid + 1;
				if(key<arr[mid])
					max = mid - 1;
			}
			else
				return mid;
		}	
		return -1;
	}
//第二种方式
	public static int binSearch2(int[] arr ,int key)
	{
		int min = 0;
		int max = arr.length-1;
		int mid = (min+max)/2;
		while(arr[mid]!=key)//只要中间值不等于key,继续循环
		{
			if(key>arr[mid])
					min = mid + 1;
			if(key<arr[mid])
					max = mid - 1;
			mid = (min+max)/2;
			if(min>max)
				return -1;
		}
		return mid;
	}


如果要把一个数插入到一个有序数组,要保证数据还是有序的,需要插入什么位置。
首先要在数组中查找这个数是否存在,如果不存在,该数要插入的位置就是返回的min。


8.进制转换
(1)十进制转换为十六进制的函数:
	public static void toHex(int x)
	{
		StringBuilder sb = new StringBuilder();
		int num;
		while(x!=0)
		{
			num = x&15;
			if(num>10)
			{
				num-=10;
				sb.append((char)(num+'a'));
			}
			else
				sb.append(num);
			x= x>>>4;
		}
		System.out.print(sb.reverse());
	}

(2)查表法十进制转换其他进制
	public static String hexadecimalTransform(int num,int base,int offset)
	{
		if(num==0)
		{
			return "0";
		}
		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;
		}
		StringBuilder sb = new StringBuilder();
		for(int x=pos;x<arr.length;x++)
		{
			sb.append(arr[x]);
		}
		return sb.toString();
	}

9.二维数组
格式一:
int[][]  arr = new int[3][2];
定义了一个二维数组,二维数组有3个一维数组,每个一维数组中有2个元素。
一维数组的名称分别为arr[0],arr[1],arr[2],给第一个一维数组的1角标位赋值23的写法是:arr[0][1]=23;
格式二:
int[][] arr = new int[3][];
二维数组中有3个一维数组,每个一维数组默认初始化值为null,可以给这3个一维数组进行初始化:
arr[0] = new int[3];
arr[1] = new int[2];
arr[2] = new int[1];
格式三:
int[][] arr = {{3,8,1},{8,2,9},{1,5}};
二维数组中有三个一维数组,每个一维数组都已初始化。
arr[0]={3,8,1};
arr[1]={8,2,9};
arr[2]={1,5};
第一个一维数组的长度:arr[0].length


System.out.println(arr)的值是: [[I@0x6c2e
System.out.println(arr[0])的值:[I@0x4ba8


获取二维数组int[][] arr = new int[a][b]的所有元素的和
int sum = 0;
for(int x=0;x<arr.length;x++)
{
	for(int y=0;y<arr[x].length;y++)
	{
		sum+=arr[x][y];
	}
}

数据的定义方式:
一维数组:int[] x ,int x[];
二维数组:int[][] y,int y[][],int[] y[];
int[] x,y[];//x是一维,y是二维
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值