数组常见操作

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

遍历

int[] arr = {45,56,86,2,5};
for(int x=0; x<arr.length; x++)
{
	System.out.println("arr["+x+"]="+arr[x]);
}

1、使用循环完成遍历。
2、arr.length可获取数组的长度,需要注意的是数组最大的角标为arr.length-1。

最值

定义一个最值变量,遍历数组,采用逐一比较的方法,记录最大的数组变量值,或者对应角标,以便后续操作。
注意:定义的最值变量初始值应为数组中的任意值。

public static int qmax(int[] arr)
{
	int max = arr[0];
	for(int x=0; x<arr.length; x++)
	{
		if (arr[x]>max)
		{
			max = arr[x];
		}
	}
	return max;
}

排序

1、选择排序法:

java中对数符号是什么意思 java对数组的操作_进制

public static void paixu(int[] arr)
	{
		for(int x=0; x<arr.length-1; x++)
		{
			int k;
			for (int y=x;y<arr.length;y++)
			{
				if(arr[y]>arr[x])
				{
					k=arr[x];
					arr[x] = arr[y];					
					arr[y]=k;
				}
			}
		}
	}

注意:
1、外层循环无需再比较,故外层循环为想x<arr.length-1;,而内层需要与最后一个比较,故内层为y<arr.length;

2、冒泡排序法:

java中对数符号是什么意思 java对数组的操作_java中对数符号是什么意思_02


代码

public static void paixu1(int[] arr)
	{
		for(int x=0; x<arr.length-1; x++)
		{
			int k;
			for (int y=0;y<arr.length-1-x;y++)
			{
				if(arr[y]<arr[y+1])
				{
					k=arr[y];
					arr[y] = arr[y+1];					
					arr[y+1]=k;
				}
			}
		}
	}

注意:
以上排序方法,一般在面试的时候用,但是日常开发不要这么写。通常开发有java内置的函数,不过在使用该函数之前需要导入一个相应的模块。

import java.util.*;
........
Arrays.sort(arr);

其中,

{
	k=arr[y];
	arr[y] = arr[y+1];					
	arr[y+1]=k;
}

可以编写成一个函数,进行调用。

public static void swap(int[] arr,int a,int b)
{
	int k=arr[a];
	arr[a] = arr[b];					
	arr[b]=k;
}

以上为升序排序。速度最快的排序是希尔排序,运用的是位运算。

排序的性能问题

java中对数符号是什么意思 java对数组的操作_数组_03


遍历时,记录最值和最值的角标,在遍历结束后,再进行换位。

public static void paixu2(int[] arr)
	{
		for(int x=0; x<arr.length-1; x++)
		{
			int num=arr[x],index=x;
			for (int y=x;y<arr.length;y++)
			{
				if(num<arr[y])
				{
					num=arr[y];
					index = y;
				}
			}
			if(x!=index)
				swap(arr,x,index);
		}
	}

基本查找
找数组中某个数字在数组中的位置,即标号。遍历,存在返回角标,不存在返回-1。

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

折半查找

能用折半查找的前提是,查找的数组是有序的数组。

java中对数符号是什么意思 java对数组的操作_16进制_04


注意:

需要定义三个变量,分别指向头、尾、和头尾的中值。通过比较中值来确定数据在那一部分。不断移动头尾变量的值,最终可查到所查找变量对应的角标,找不到返回-1。

public static int getindex1(int[] arr,int a)
	{
		int min=0,max=arr.length-1;
		int mid=(min+max)/2;
		while(min<=max)
		{
			if(arr[mid]>a)
			{
				max=mid-1;
			}
			else if (arr[mid]<a)
			{
				min = mid+1;
			}
			else 
				return mid;
			mid=(min+max)/2;
		}
		return -1;
	}

注意:
在java内部有开发用的二分法查找函数:

Arrays.binarySearch(arr);

功能为:如果存在,返回角标,如果不存在,则返回-min-1,即负的插入点减1。(该做法是为了避免与存在时冲突),同时也需要加头文件。

进制转化

将一个整数转为16进制表现形式

思路:1、进行位运算,16进制即4位为一个单位。故可以4位4位的取整数。得到各个位上的16进制数。
2、取4位则可以采取与1111(15)的方式。
3、然后右移4位:>>> 4。(无符号右移)
4、大于10时要转化,即(char)(temp-10+‘A’),或者使用查表法。直接搞一个数组存0-F。
5、数据一多,就先存起来,再进行操作。所以可以定义一个数组,作为临时容器,用指针进行操作。
6、由于从低位开始转为,故从数组的最后一个开始存,这样输出的时候就是正序啦。

将一个整数转为其它制表现形式

1、2进制则与上1即可,而8进制则与上3位,即111(7)。
2、存储的数组长度需要加长啦。

以上,在java函数中都有相应的内置函数。

Integer.toBinaryString();//十进制→2进制
 Integer.toHexString();//十进制 →16进制
 integer.toOctal();//十进制 → 8进制