黑马程序员———数组
来源:互联网 发布: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
- 黑马程序员—数组
- 黑马程序员—数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- 黑马程序员——数组
- clojure实战—— :pos & :pre断言
- 2013Excel画甘特图
- velociy 插件安装
- NYOJ 86 找球号
- qemu 内核启动输出结果保存
- 黑马程序员———数组
- Windows进程间通信的各种方法
- Problem - 1001_Sum Problem
- c#中DataGridView简介
- iOS学习之 plist文件的读写
- 对MYSQL IFNULL函数的使用进行了详细的叙述
- Eclipse 安装 html插件
- 津门谈创新 天大论构建
- java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor