黑马程序员———数组

来源:互联网 发布:mac homebrew 是什么 编辑:程序博客网 时间:2024/06/13 08:26


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

数组

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

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

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

示例: int[] arr = new int[5];

格式二: 元素类型[] 数组名 = new 元素类型[] {元素,元素,......}

示例:

int [] arr = new int [] {2,3,4,5};

int [] arr = {3,2,3,4};

 

内存结构

Java程序在运行时,需要在内存中分配空间。为了提高运算效率,对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存: 用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存:

A  数组和对象,通过new建立的实例都存放在堆内存中

B  每一个实体都有内存地址值

C  实体中的变量都有默认初始化值

D  实体不再被使用,会在不确定的时间内被垃圾回收器回收

还有方法区,本地方法区,寄存器。

null: 内存地址指向为空

C++ 由程序员手动清除内存,Java程序员不用手动清除,对象或实体变为垃圾,Java虚拟机的垃圾回收机制自动将内存中不再被使用的实体不定时清除

关于数组的一些练习程序

package day01;/*获取数组中的最大值 * 思路: * 1,获取最值需要进行比较,每一次比较都会有一个较大的值,因为该值不确定,通过一个变量进行临时存储 * 2,让数组中的每一个元素都和这个变量中的值进行比较,如果大于了变量中的值,就用该变量记录较大值 * 3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了 * 步骤: * 1,定义变量,初始化为书中任意一个元素即可 * 2,通过循环语句对数组进行遍历 * 3,在遍历过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量 *  * */public class ArrMax {public static void main(String[] args) {int [] arr = {2,3,4,2,34,445,33};System.out.println(getMax(arr));}public static int getMax(int[] arr){//中间变量int temp = arr[0];for(int i=0; i <arr.length; i++){//如果元素大于temp 就把它的值赋给tempif(arr[i]>temp)temp = arr[i];}return temp;}}

输出结果:445

选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完

示图:

示例代码:

package day01;import java.util.Arrays;public class ArrDemo {public static void main(String[] args) {//给定数组int[] arr = {2,5,1,4,7};//排序selectSort(arr);System.out.println(Arrays.toString(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;} }}}}

 

打印结果[1,2,4,5,7]

冒泡排序:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

package day01;import java.util.Arrays;public class ArrDemo {public static void main(String[] args) {//给定数组int[] arr = {2,5,1,4,7};//排序bubbleSort(arr);System.out.println(Arrays.toString(arr));}//冒泡排序public static void bubbleSort(int[] arr){for(int x = 0; x < arr.length-1; x++){for(int y = 0; y < arr.length-1-x; y++){//-x:让每一次比较的元素减少;-1避免角标越界//交换元素位置if(arr[y] > arr[y+1]){int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}}


 

打印结果[1,2,4,5,7]

折半查找

package day01;import java.util.Arrays;public class ArrDemo {public static void main(String[] args) {//给定数组int[] arr = {1,2,3,4,7,9,11};int index = halfSearch_2(arr,4);        System.out.println(index);}//第一种折半public static int halfSearch(int[] arr,int key){int min = 0,max = arr.length-1, mid;while(min<=max){mid = (min+max)>>1;    if(key > arr[mid])    min = mid + 1;    else if (key < arr[mid])    max = mid -1 ;    else     return mid;}return - 1;}//第二种折半public static int halfSearch_2(int[] arr,int key){int min = 0,max = arr.length-1;int mid = (min + max)>>1;while(key != arr[mid]){if(key > arr[mid])min = mid + 1;else if (key < arr[mid])max = mid -1;if(min > max)return -1;mid = (min + max)>>1; }return mid;}}


 

打印结果:3

将十进制转化为二进制、八进制、十六进制

示例代码:

package day01;//查表法十进制到二进制 八进制 十六进制的转换public class Trans {public static void main(String [] arrgs){toBin(6);System.out.println();toOct(43);System.out.println();toHex(345);}//转换为二进制public static void toBin(int num){trans(num,1,1);}//转换为八进制public static void toOct(int num){trans(num,7,3);}//转换为十六进制public static void toHex(int num){trans(num,15,4);}public static void trans(int num, int base, int offset) {//如果num等于0,结果输出为0if (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) {//num 与base 相与int temp = num & base;//将查到的字符存储到arr的--pos角标arr[--pos] = chs[temp];//num无符号右移offset位num = num >>> offset;}for (int i = pos; i < arr.length; i++) {System.out.print(arr[i]);}}}


 

输出结果:

110
53
159

 

 

 

 

0 0
原创粉丝点击