------- android培训、java培训、期待与您交流! ----------
主要内容:一数组、二 数组排序(选择、冒泡)、三 数组查找(折半)、四 进制转换、五 二维数组
一、数组的定义
概念:同一种类型数据的集合。其实数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
数组的两个常见异常:
ArrayIndexOutOfBoundsException: 3:操作数组时,访问到了数组中不存在的角标。
NullPointerException:空指针异常:当引用没有任何指向值为null的情况,
该引用还在用于操作实体。
打印数组中的元素,通常会用到遍历。
class ArrayDemo
{
public static void main(String[] args)
{
int[] arr = {4,3,2,6,5,7,8}
printArray(arr);
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]"0);
}
}
}
获取数组中的最值
class ArrayTest
{
public static void 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 main(String[] args)
{
int[] arr = {4,4,7,8,9,3,5};
int max = getMax(arr);
System.out.println("max="+max);
}
}
二、对给定数组排序。
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 bulbbleSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x-1;y++)//-x:让每一次比较的元素减少,-1:避免角标越界
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
3,真实开发中用到的排序,java已经提供好了
import java.util.*;
{
Arrays.sort(arr);
}
三、数组的查找操作。1,顺序查找。
public static void main(String[] args)
{
int[] arr = {4,7,6,8,9,3,5};
int index = getIndex(arr,3);
System.out.println("index="+index);
}
//定义功能,获取key第一次出现在数组中的位置。如果返回-1,代表该key在数组中不存在。
public static void getIndex(int[] arr,int key)
{
for(x=0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
2,折半查找。可以提高效率,但是必须保证数组是有序的。
public static void main(String[] args)
{
int[] arr = {4,5,6,8,9,11,13};
int index = halfSearch(arr,11);
System.out.println("index="+index);
}
public static void halfSearch(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while (min<max)
{
mid = (max+min)>>1;//相当于除以2
if(key>arr[mid]
min = mid+1;
else if(key<arr[mid])
max = mid-1;
else
return min;
}
return -1;
}
四、用数组实现十进制转二进制、八进制、十六进制示例
十进制转换其他进制,需要明确3个数据。num被转换的十进制数,base是&上的基数。
offset右移的位数。
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;//base是转换的基数
arr[--pos] = chs[temp];
num = num >>>offset;//offset右移位数
}
for(int x=pos;x<arr.length;x++)//从有效位遍历
{
System.out.print(arr[x]);
}
}
十进制-->二进制
public static void toBin(int num)
{
trans(num,1,1);//二进制,&上1,每次右移1位
}
十进制-->八进制
public static void toBa(int num)
{
trans(num,7,3);//八进制,&上7,每次右移3位
}
十进制-->十六进制
public static void toHex(int num)
{
trans(num,15,4);//十六进制,&上15,每次右移4位
}
五、二维数组[][]格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1角标赋值为78的写法是:arr[0][1]=78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];