1、数组定义
int[] arr = new int[1024];
也可以int arr[] = new int[1024];(C++是这种方式, Java推荐上一种)
2、for循环遍历
class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
for (int x=0; x<arr.length; x++)
{
System.out.println("arr["+x+"]="+arr[x]+";");
}
}
}//很基础很简单
不能用这种方式打印System.out.println(arr);
打印出的是数组arr的哈希地址。乍一看以为乱码。
3、另一种思路求最值
另一种思路求最大值/最小值:
public static int getMax2(int[] arr)
{
int max = 0;
//利用数组的角标记录最大值
for (int x=1; x<arr.length; x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
4、选择排序:
第一个元素挨个与后面比较,一轮结束最小/大值的排在首位。依次比较第二位元素至末尾,最后比较n-1与n位。
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 tem=0;
tem = arr[x];
arr[x]=arr[y];
arr[y]=tem;
}
}
}
}
5、冒泡排序:
相邻两元素比较,1和2, 2和3,。。。n-1和n。一轮结束最小/大值到最后,再下一轮排列1到n-1。
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 tem=0;
tem = arr[y];
arr[y]=arr[y+1];
arr[y+1]=tem;
}
}
}
}
以上方法好记,但是效率不高,因为是数组。可以改进方法使用角标index。实际开发使用的是java.util.* 包的功能Array.sort(arr);
6、折半查找:前提是数组是有序排列
原理:查找的元素每次都跟中间角标数组元素比较,若小於则查找左边, 若大於则查找右边,一层层深入。
衍生应用,在顺序数组中插入一值,保持排序。
代码示例:
public static int halfSearch(int[] arr, int key)
{
int max, min, mid;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
while (key != arr[mid])
{
if (key < arr[mid])
{
max = mid-1;
}
else if (key > arr[mid])
{
min = mid+1;
}
if(min>max)//此处判断超出范围
return -1;
mid = (min+max)/2;
}
return mid;
}
7、以数组的方式转换16进制。
public static void toHex2(int num)
{
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] ret = new char[8];
int pos = 0;
while(num != 0)
//这里用while的目的是判断num为零后就不再存储,这样取出时就没有0的数。
{
int tem = num & 0xf;
ret[pos++]=chs[tem];
System.out.println(chs[tem]);
num = num >>> 4;
}
for (int i=pos-1; i>=0; i--)
{
System.out.print(ret[i]+",");
}
}