Java学习个人备忘录之数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习个人备忘录之数组相关的知识,希望对你有一定的参考价值。

数组

概念:同一种类型数据的集合,其实数组就是一个容器.

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

格式1:元素类型[] 数组名 = new 元素类型[元素个数];

格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3,....,元素N};


内存的划分:
1:寄存器
2:本地方法区
3:方法区
4:栈内存
  存储的都是局部变量
  而且变量所属的作用域一旦结束,该变量就自动释放
5: 堆内存
存储的是数组和对象(其实数组就是对象) 凡是new 建立的都在堆中.
特点:
1.每一个实体都有首地址值
2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.

class ArrayDemo
{
	public static void main(String[] args)
	{
		int[] arr = new int[3];
		System.out.println(arr(3)); //ArrayIndexOutOfBoundsException
		//当访问到数组中不存在的角标时,就会发生该异常.


		arr = null;
		System.out.println(arr[0]);//NullpointerExeception
		//当引用变量没有任何实体指向时,还在用其操作实体,就会发生该异常.
	}
}

 

对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。

常见数组应用算法

数组遍历

int[] arr = {89,34,280,15};
for (int x = 0; x<arr.length ; x++ )
{
	System.out.println(arr[x]);
}


数组最值

public static int getMax(int[] arr)
{
	//定义变量记录较大的值
	int max = arr[0];
	for (int x=1; x<arr.length ; x++ )
	{
		if(arr[x]>max)
		{
			max = arr[x];
		}
	}
	return max;
}
//第二种方法
public static int getMax(int[] arr)
{
	//定义变量记录较大的值
	int max = 0;
	for (int x=1; x<arr.length ; x++ )
	{
		if(arr[x]>arr[max])
		{
			max = x;
		}
	}
	return arr[max];  //这里返回的最大值的角标
}


选择排序

public static void selectSort(int[] arr)
{
	for (int x=0; x<arr.length ; 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;
			}
		}
	}
}


冒泡排序

/*
内循环:
-1: 为了避免角标越界
-x: 为了让外循环增加一次,内循环参数与比较的元素个数递减.
*/
for (int x=0; x<arr.length ; x++ )
{
	for (int y=0; y<arr.length-1-x ; y++ )
	{
		if (arr[y]>arr[y+1])
		{
			int temp = arr[y];
			arr[y] = arr[y+1];
			arr[y+1] = temp;
		}
	}
}
// 方法二:
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;
		}
	}
}


查找: 返回数组的角标

public static getIndex(int[] arr,int value)
{
	for (int x=0; x<arr.length ; x++ )
	{
		if (arr[x] == key)
		{
			return x;
		}
	}
	return -1;
}


进制转换 10->16

public static void toHex(int num)
{
	for (int x=0; x<8 ; x++ )
	{
		int temp = num & 15;
		if (temp>9)
			System.out.print((char)(temp-10+‘A‘));
		else
			System.out.print(temp);
			num = num >>> 4;
	}
}


什么时候使用数组呢?
如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。这时就必须要想到数组的使用。

就可以将这些数据存储到数组中,根据运算的结果作为角标直接去查数组中对应的元素即可。
这种方式: 称为查表法.

public static void toHex_1(int num)
{
	// 定义一个对应关系表
	char[] chs = {‘0‘,‘1‘,‘2‘,‘3‘,
	‘4‘,‘5‘,‘6‘,‘7‘,
	‘8‘,‘9‘,‘A‘,‘B‘,
	‘C‘,‘D‘,‘E‘,‘F‘};

	for(int x=0; x<8; x++)
	{
		int temp = num & 15;
		System.out.println(chs[temp]);
		num = num >>> 4;
	}
}//但是这个方法显示出来的写过是反着的

public static void toHex_2(int num)
{
	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[8];
	int pos = arr.length;

	while(num != 0)
	{
		int temp = num & 15;
		arr[--pos] = chs[temp];
		num = num >>> 4;
	}

	System.out.println("pos=" + pos);
	for (int x = pos; x<arr.length ; x++ )
	{
		System.out.println(arr[x] + ",");
	}
}

 


二维数组定义的格式

class Array2Demo
{
	public static void main(String[] args)
	{
		int[][] arr = new int[3][2]; //这就是二维数组的定义格式.
		//该数组中有3个大箱子,每个大箱子中有2个小箱子

		System.out.println(arr); //[[email protected]   @左边是实体的类型.   @右边是实体的哈希值.
		System.out.println(arr);//直接打印二维数组
		System.out.println(arr[0]); //直接打印二维数组中角标0下面的一维数组

		/*********************************************************************/

		int[][] arr = new int[3][];
		arr[0] = new int[2];
		arr[1] = new int[1];
		arr[2] = new int[3];
		//分别对二维数组中的每一个小数组进行初始化.

		/**********************************************************************/

		int[][] arr = new int[3][2];
		System.out.println(arr.length); //打印二维数组的长度,其实就是一维数组的个数
		System.out.println(arr[1].length);

		/***********************************************************************/

		//第二种定义方式
		int[][] arr = {{8,3,6},{7,4,9},{3,0,7}};
		int sum = 0;

		//遍历二维数组
		for (int x=0; x<arr.length ; x++ )
		{
			for (int y=0; y<arr[x].length ; y++ )
			{
				System.out.println(arr[x][y]+",");
				sum += arr[x][y];
			}
		}
		System.out.println("sum="+sum);
	}
}

 

以上是关于Java学习个人备忘录之数组的主要内容,如果未能解决你的问题,请参考以下文章

Java学习个人备忘录之继承

Java学习个人备忘录之接口

Java学习个人备忘录之关键字final

Java学习个人备忘录之面向对象概念

Java学习个人备忘录之内部类

几个关于js数组方法reduce的经典片段