(4)数组常见操作
a.遍历取值
class ArrayDemo3 { public static void main(String[] args) { //System.out.println("Hello World!"); //格式1 /* 需要一个容器,但不明确容器的具体数据。 */ //int[] arr = new int[8]; //格式2 /* 需要一个容器,储存一直的具体数据。 */ //元素类型[] 数组名 = new 元素类型[](元素,元素,....); //int[] arr = new int[]{12,25,58,69}; int[] arr = {12,25,58,69};//写法相对较简单 /* 对数组的操作最基本的功能就是存和取。 核心思想:就是对角标的操作。 */ //System.out.println(arr[0]); //System.out.println(arr[1]); //System.out.println(arr[2]); //System.out.println(arr[3]); //System.out.println(arr.length);//arr数组的长度 for(int x=0;x<arr.length ;x++) {
System.out.println("arr["+x+"]="+arr[x]+";"); } } }
b.获取最值(最大值,最小值)
class ArrayDemo4 { public static void main(String[] args) { int[] arr = {25,56,35,97,39}; int max = getMax(arr); System.out.println("max="+max); } /* 获取数组中的最大值 1.需要进行比较,并定义变量记录每次比较后较大的值。 2.对数组中的元素进行遍历取出,和变量中记录的元素进行比较。 如果遍历到的元素大于变量中记录的元素,就用变量记录住较大的值。 3.遍历结束,该变量记录就是最大值。 定义一个功能来实现。 明确一,结果 是数组中的元素。 明确二,位置内容 数组。 */ public static int getMax(int[] arr) { //定义变量记录较大的值。 int maxElement = arr[0]; for(int x = 0;x<arr.length ;x++) { if(arr[x]>maxElement) { maxElement = arr[x]; } } return maxElement; } public static int getMax_2(int[] arr) { //定义变量记录较大的值。 int maxIndex = 0; for(int x = 0;x<arr.length ;x++) { if(arr[x]>arr[maxIndex]) { maxIndex = x; } } return arr[maxIndex]; } }
c.排序(选择排序、冒泡排序)
class ArrayDemo4 { public static void main(String[] args) { int[] arr = {25,56,35,97,39}; selectSort(arr); } /* 选择排序 */ 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; } } } } /* 冒泡排序 */ public static void bubbleSort(int[] arr) { 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; } } } } }
d.拆半查找(二分查找)
(5)数组中的数组
class ArrayDemo5 { public static void main(String[] args) { //int [] arr = {5,8,12,54,23,69,52}; //int index = getIndex(arr,619); //int [] arr = {5,8,12,23,39,69,95}; //int index = halfSearch_2(arr,70); //System.out.println(index); //int index1 = Arrays.binarySearch(arr,12);//如果存在,返回的是具体角标位,如果不存在,返回的是 -插入点-1; //System.out.println("index1="+index1); toHex_1(60); //System.out.println("index1="+index1); } /* 二分查找法 */ public static int halfSearch(int[] arr,int key) { int max,min,mid; min = 0; max = arr.length-1; mid = (min+max)/2; while(arr[mid] != key) { if(key>arr[mid]) { min = mid+1; }else { max = mid-1; } if(max<min) { return -1; } mid = (min+max)/2; } return mid; } public static int halfSearch_2(int[] arr, int key) { int max,min,mid; min = 0; max = arr.length-1; while(min<max) { mid = (min+max)>>1;//右移1位就是除2. if(key>arr[mid]) min = mid+1; else if(key<arr[mid]) max = mid-1; else return mid; } return -1; } /* 数组常见功能:查找。如果数组中有两个目的元素,返回的是第一个元素所在的索引。 */ /*public static int getIndex(int arr[],int key) { for(int x=0;x<arr.length;x++) { if(arr[x] == key) { return x; } } return -1; }*/ /* 什么时候使用数组呢? 如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用, 这时候就必须要想到数组的使用。 就可以将这些数据储存到数组中。 根据运算的结果作为角标直接去查数组中对应的元素即可。 这种方式:称为查表法。 */ public static void toHex_1(int num){ //定义一个对应关系表 char[] chs = {'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.print(chs[temp]); num = num >>>4; } } public static void toHex_2(int num){ //定义一个对应关系表 char[] chs = {'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; /* 一会查表会查到比较多的数据 数据一多,就先存起来,再进行操作。 所以定义一个数组,临时容器 */ char[] arr = new char[8]; int pos = 0; while(num != 0) { int tamp = num&15; arr[pos++] = chs[temp]; num = num >>>4; } } }