《Java经典编程300例》读书笔记
1.java基本数据类型8种
整形: byte、short、int、long 四种
Byte 一个字节=8bit,2的8-1次方,一bit表示正负,取值范围是-128-+127,0在中间,所以正数是127
Short 2个字节,2的16-1次方,-32768-+32767,3万2千多点
Int 4个字节,2的32-1次方、正负21亿左右;老外应该是按照2的次方来排序的,long应该是8的字节了,
Long 8个字节 2的64-1次方非常大了,千万亿以上了,再大不知道了
字符型:char
应该2个字节,符合太多了,128表示不了,多来一个
布尔型:boolean 肯定一个字节就够了 只有true or false
浮点型:float、double
Float 4个字节,-2^128 ~ +2^127,double 8个字节,-2^1024 ~ +2^1023
浮点型直接是= 比较有问题,谨慎使用吧!一般用BigDecimal比较
注: long型后如果不加L则默认为int型,浮点型如果不加F则默认为double型
2.java异或操作
操作符“^”意思是不同的话进行或操作,就是说相同了是0,不同了是1,指的是内存的相同,不是结果的相同,0101^0111=0010;异或运算本章指出可用于三种常用操作:加密、变量互换、查找2k+1中的不同的值。原理都是异或核心内容。
3.字符串按照空格分割
String[] numStrs = arrayStr.split(" {1,}"); // 分割字符串
一个或多个空格分割,记一下有用
4.String 字符串的按照指定方式格式化字符串
这个没这么用过,了解一下,简单例子有点意思,不过一般用不到,应该在log中可能用的。Java的图形化界面(GUI)不多看了,根本用不到。
public static void main(String[] args) {
String formatArg = "本次抽取观众人员:\n\t%1$s\n恭喜%1$5s成为本次观众抽奖的大奖得主。"
+ "\n\n我们将为%1$s**颁发:\n\t过期的酸奶二十箱。";
// 为中奖信息添加人员参数
String info = String.format(formatArg, "郭航飞");
System.out.println(info);
}
5.冒泡排序法
例如有5个值,首先:第一个值依次和第2-5个值比较,碰到比第1 个值大的,记录下标,用当前值继续向后比较,一直到最后。例如结果是第3个值最大,将最大值和最后一个值互换位置,最大值放到最后。第二轮开始,同样第一个值开始比较、互换。注意不在比较最后一个值。
重点在互换和第二轮比较要排除之前的最大值。双重for循环进行比较。
选择排序就是首先选择一个最大或者最小的开始比较。如果数组中有多个重复的值,这个方法比较快,因为重复值减少了互换的次数,快了一点。
6.冒泡排序法
例如有5个值,将第1个值和第2个值比较,2>1进行交换,保证小值在前大值再后,不大于不交换,之后用第2个值和第3个交换,依次类推,最终最大的值在低5个位置;第二轮和第一轮一样,只是少了第最后一个值比较,已经知道最大了不用比了。
重点在比较的互换
7.快速排序法
基本思路是通过选取一个关键值,第一个或者中间都行。通过一次排序将数据分成以关键值为分割的两部分值,例如左侧<关键值,右侧>关键值,之后递归调用排序方法安装上面方式异常进行互换。之所以快是因为每次分割之后都回重新分配一次关键值
8.插入排序法
例如有5个值,首先第一轮对第1、2个数值进行比较,顺序排序,后3个不动;第二轮用第3个数对和排好顺序的2进行比较,如果大于2 不动,小于2 互换,接着和1比较小于1互换,后2个不动;第三-五轮依次类推,最终实现排序。
- dual-pivot-quicksort 双轴快速排序
Jdk7里Array.sort(arrty),使用的排序。大概比快速排序提高了10%,快速的原因的随着时代发展,电脑CPU的速度比内存的速度快了太多,之前的元素之间比较的次数已经不能真实的比较排序的快慢了,应该使用扫描元素个数来表示,说白了就是cpu读内存的次数,多得少了自然就快了。实际上在cup运行的时间应该是一致的。
双轴快速排序 和 快速排序速度其实是一样的思路,不同在快速排序开始分成一个轴而双轴排序分成两个轴。
9.单例模式
听了无数遍了,系统中只有一个实例。
白话一点:说白了就是不允许使用new来创建对象,就是任何方法调用此类生成的实例只有一个。需要将默认的构造方法设置成private。然后使用一个静态方法生产实例。