《Java经典编程300例》读书笔记

这篇博客是《Java经典编程300例》的读书笔记,涵盖了Java的基本数据类型、异或操作、字符串处理、排序算法、单例模式、重载与重写、native关键字、比较接口、策略模式、适配器模式等多个核心概念。博主深入浅出地介绍了这些知识点,并给出了实例和应用场景,是Java初学者和进阶者的宝贵参考资料。
摘要由CSDN通过智能技术生成

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个不动;第三-五轮依次类推,最终实现排序。

  1. dual-pivot-quicksort 双轴快速排序

Jdk7里Array.sort(arrty),使用的排序。大概比快速排序提高了10%,快速的原因的随着时代发展,电脑CPU的速度比内存的速度快了太多,之前的元素之间比较的次已经不能真实的比较排序的快慢了,应该使用扫描元素个数来表示,说白了就是cpu读内存的次数,多得少了自然就快了。实际上在cup运行的时间应该是一致的。

双轴快速排序 和 快速排序速度其实是一样的思路,不同在快速排序开始分成一个轴而双轴排序分成两个轴。

9.单例模式

听了无数遍了,系统中只有一个实例。

白话一点:说白了就是不允许使用new来创建对象,就是任何方法调用此类生成的实例只有一个。需要将默认的构造方法设置成private。然后使用一个静态方法生产实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值