黑马程序员-java基础之排序、查找、内存分配、函数重载
来源:互联网 发布:类似美工云的网站 编辑:程序博客网 时间:2024/06/06 06:49
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
Java中的变量类型
分为基本数据类型和引用数据类型。
基本数据类型:整数型(byte,short、int 、long)、浮点型(float、double) 布尔型(boelean)、字符型(char)
Byte类型(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)。char 类型2个字节。
引用数据类型:类、接口、数组等。引用数据类型的大小统一为4个字节。
函数的重载(overloading):
函数重载的几种形式:
(1) 参数个数不同(2)参数个数相同,但是类型不同
Jvm 会根据函数参数的不同来自动调用相应的重载函数
注意:函数重载的形式不能使参数完全相同,返回值不同,这样会造成函数调用的不确定性。
public class OverloadTest {//两个整型相加public static int add(int x,int y){return x+y;}//三个整型相加public static int add(int x,int y,int z){return x+y+z;}//两个double相加public static double add(double x,double y){return x+y;}public static void main(String[] args) {System.out.println(add(1,2));System.out.println(add(1,2,3));System.out.println(add(3.14,5.18));}}
Java中的内存
Java把内存划分成了两种:一种是栈内存,另一种是堆内存。
栈内存:分配基本类型的变量和对象的引用变量
堆内存:用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。当堆内存中的对象或者数组不再被任何引用变量所引用时,就会变成垃圾,但是不会被立即释放,要等到自动垃圾回收器运行才会被释放,这也是Java占内存的一个原因。
数组
Int [] x = new int[100];这句话的执行过程
1、 在栈内存中分配一个4个字节的空间给引用变量x;并赋值为NULL。
2、 在堆内存中创建一个数组,并且分配100个整型单元。
3、 将数组第一个单元的地址赋值给x.
数组使用过程中的两个常见异常:
NullPointerException 空指针异常。出现此异常,通常是没有给引用变量赋值就使用该引用变量。
ArrayIndexOutOfBoundsException数组越界异常。出现此异常,通常是使用了不存在的数组角标。
二维数组:java中的二维数组就是数组的数组。每一个一维数组的首个元素都是一个一维数组的引用。
两个操作数组的函数:
System.arraycopy(source, 0, dest, 0, x);将source数组的0到x的内容复制到dest数组中。
Arrays.sort(array)将array数组中的元素进行升序排序。
小面试题及技巧
1、最有效率的方式算出2乘以8等于几?
classOperateTest {public static void main(String[] args) {System.out.println(2<<3);//位运算}}
2、对两个整数变量的值进行互换(不需要第三方变量)
(1)这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换。数据会变化。
a = a + b; b = a -b; a = a -b;
(2)开发时使用第三方变量的形式,因为阅读性强。
int c ;c = a;a = b;b = c;
(3)面试的时候用。当一个数与另一个数异或运算两次还是同一个数。
a = a ^ b; b = a ^ b;a = a ^ b;
排序
选择排序
思路:
1、 第一个元素跟后面的元素依次相比较,如果第一个元素大于后面的元素,换位,如果大于或等于,不作任何操作。
2、 第二个元素跟后面的元素相比较,具体操作同步骤1.依次进行,直到arr.length-1;
3、 得到排序后的数组。
注意:进行一趟选择排序后,最小的元素会在第一个,进行第二趟之后,次小的会在第二个……
/* * 选择排序的思路: * 1、第一个元素依次跟后面所有元素比较,如果大于,则交换,如果不大于,则什么也不做。 * 这样一趟排序后,最小的会在第一个。 * 2、从第二个元素开始依次跟后面的元素相比较,两趟排序后,次小的会在第二个。。。以此类推。。。。 */public static void selectSort(int[]arr){for(int i = 0;i<arr.length;i++){//外循环从第一个元素开始,依次与后面的元素比较for(int j = i+1;j<arr.length;j++){//内循环,从第i+1个元素开始,依次与第i个比较if(arr[i]>arr[j])swap(i,j,arr);}}}
冒泡排序
思路:
1、 从第一个元素至最后一个元素,每一个元素跟相邻的后一个元素相比较,如果前面的元素大于后面的元素,换位,其他,不进行任何操作。
2、 从第一个元素至倒数第二个元素,每一个元素相邻的后一个元素相比较,步骤同1.
3、 得到排序后的数组。
注意:冒泡排序一趟排序后的结果为最大的元素在最后一个,两趟排序之后,次大的在第二个……
/* * 冒泡排序的思路 * 1、从第一个元素开始每一个元素都与它的后一个元素相比较,如果大于,则交换,如果不大于,则什么也不做 * 这样一趟排序之后,最大的元素在最后 * 2、从第一个元素开始直至倒数第二个元素(因为一趟排序后最大的已经在最后,不必参与比较), * 每一个元素都与它后面的元素相比较,两趟排序之后,次大的会在倒数第二个。 * */public static void bubbleSort(int[] arr){for(int i = 0;i<arr.length-1;i++){//外循环,控制排序的趟数。for(int j = 0;j<arr.length-i-1;j++){//内循环,从第一个元素开始,每一个元素依次与后面的元素比较,控制每趟具体的元素比较。if(arr[j]>arr[j+1])swap(j,j+1,arr);}}}
折半查找
/* * 折半查找的思路: * 条件:必须是已经排序好的数组。 * 1、先假设数组已经升序排序完毕,首先将中间元素与待查找元素相比,如果大于中间元素,查找上半部分 * 若小于中间元素,查找下半部分。 * 2、依次类推,直至找到。 *///折半查找,返回key在数组中的角标public static int binarySearch(int []arr,int key){int mid ,min,max;min = 0;max = arr.length;mid = (min+max)/2;while(min<max){if(key>arr[mid])min = mid+1;else if(key <arr[mid])max = mid-1;mid = (min+max)/2;if(key == arr[mid])break;}if(min >= max )return -1;return mid;}
递归方式实现:
//折半查找-递归实现方式public static int binarySearchByRecursion(int[]arr,int min,int max,int key){//这里出现了StackOverflowError:栈溢出错误。/*个人猜想:一旦调用此递归函数查找一个数组中不存在的数时,此递归就找不到出口了, * 因而进入反复的递归调用,直至临时变量充满整个栈内存,致使内存不足,程序出现此错误。 * 程序修正:将if(min>=max) return -1;语句调到函数前段,应该先判断初始条件min<max这一原则 * 程序才能往下进行。因此,应归为逻辑错误。 */if(min>=max)return -1;int mid = (min + max)/2;if(key == arr[mid])return mid;else if(key<arr[mid])return binarySearchByRecursion(arr,min,mid-1,key);else if(key>arr[mid])return binarySearchByRecursion(arr,mid+1,max,key);//if(min>=max)//return -1;return -1;}
递归方式:编程时不推荐使用,占内存,效率低。
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
- 黑马程序员-java基础之排序、查找、内存分配、函数重载
- 黑马程序员——JAVA基础之函数,重载,内存结构
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 黑马程序员--java入门之函数重载
- 黑马程序员java基础篇----关于java内存分配
- 黑马程序员:Java基础之选择排序
- 黑马程序员-------Java基础之选择排序
- 黑马程序员 Java基础之排序
- 黑马程序员Java基础__函数的应用及重载
- 黑马程序员——Java基础<三.排序+查找)
- 黑马程序员 java语法基础之函数
- “黑马程序员”Java 基础之函数
- 黑马程序员-java内存分配的策略
- 黑马程序员_java基础之重载
- 黑马程序员——2.2.基础语法(函数、重载、数组、内存划分,进制转换)
- 黑马程序员——java基础——java内存分配与管理
- 黑马程序员_JAVA 之函数的重载
- 黑马程序员 java入门:函数的重载
- bash重拾
- Android Service 服务(一)—— Service
- 如何实现P2P穿透
- Android Contacts(二)—— SMS 短信 与 Contacts 联系人关联
- Android Contacts(一)—— 读取联系人
- 黑马程序员-java基础之排序、查找、内存分配、函数重载
- Android SMS(二)—— 读取短信保存到 SQLite
- H.264 无参考视频质量评价方法 (使用了基于遗传编程方法的符号回归)
- tomcat服务的配置和开启
- 给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数
- Android SMS(一) —— 读取短信
- 银行业务调度系统
- Android 国内应用市场的汇总
- Bitmap 之 getPixels() 的 stride