2、 Bit Map的基本思想
我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0,如下图:
然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作 p+(i/8)|(0x01<<(i%8)) 当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending),因为是从零开始的,所以要把第五位置为一(如下图):
然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit位的状态如下:
然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。
优点:
1.运算效率高,不许进行比较和移位;
2.占用内存少,比如N=10000000;只需占用内存为N/8=1250000Byte=1.25M。
缺点:
所有的数据不能重复。即不可对重复的数据进行排序和查找。
算法思想比较简单,但关键是如何确定十进制的数映射到二进制bit位的map图。
bitmap表为:
a[0]--------->0-31
a[1]--------->32-63
a[2]--------->64-95
a[3]--------->96-127
..........
那么十进制数如
Ctrl L 删除当前行
Ctrl T 当行向上移动一行
F3 查找下一个
Shift F3 查找上一个
Ctrl Shift F 组合在文件中查找
Ctrl F3 查找(volatil)下一页
Ctrl Shift F3 查找(volatil)上一页
Ctrl Shift I 组合增量搜索
Ctrl S 保存文件
Ctrl Alt S 另存为
Ctrl Shift S 保存所有文件
Ctrl O 打开文件
Ctrl N 新建立文件
Ctrl F2 切换书签
F2 转到下一个书签
Shift F2 转到上一个书签
CTRL G 定位换行,偏移量
Ctrl W 关闭当前文档
Alt Shift Arrow 键移箭头键或
ALT 鼠标左键 单击列选择
F5 启动运行对话框
Ctrl 空格 输入法切换
Alt 空格 程序单击右键
Tab 插入缩进
Shift Tab 删除缩进
Alt-Shift-Arrow 或
Ctrl 鼠标滚轮钮 放大缩小
Ctrl Keypad/恢复原来的大小
F11 全屏模式
Ctrl Tab 下一个文档
Ctrl Shift Tab 上一个文档
Ctrl Shift Up 当前线向上移
Ctrl-Shift-Down 当前线向下移
Ctrl Alt F 折叠当前层次
Ctrl Alt Shift F展开当前层次
Alt 0 折叠全部
Alt Shift 0 展开全部
Alt (1~8) 折叠级别(1~8)
Alt Shift (1~8) 展开级别(1~8)
Ctrl BackSpace 删除开始词
Ctrl Delete 删除结束词
Ctrl Shift BackSpace 删除至行
Ctrl Shift Delete 删除至行尾
CTRL U 转换为小写
Ctrl Shift U 转换为大写
Ctrl B 转至匹配的括号
Ctrl Shift R 的开始录制/停止录制宏
Ctrl Shift P 播放录制的宏
CTRL Q 注释/取消注释
Ctrl Shift Q 值流评论
Ctrl Shift T 当前行复制到剪贴板
Ctrl P 打印
Alt F4 退出
Ctrl I 分割线
Ctrl C 复制
Ctrl X 剪切
Ctrl V 粘贴
Ctrl Z 撤消
Ctrl Y 恢复
Ctrl A 全选
Ctrl F 键查找对话框启动
Ctrl H 查找/替换对话框
Ctrl D 复制并粘贴当行
Ctrl J 连接行
Ctrl Alt R 从右边阅读
Ctrl Alt L 从左边阅读
Ctrl H 打开Find / Replace 对话框
Ctrl D 复制当前行
Ctrl L 删除当前行
Ctrl T 上下行交换
F3 找下一个
Shift F3 找上一个
Ctrl Shift-F 在文件中找
Ctrl F2 触发书签
2.源文件夹等概念
Eclipse会自动编译放置在源文件夹内的源文件
一些不需要编译的文件需要放置在普通文件夹下
3.基本代码的编写
代码提示强制显示:alt + /
第二讲 Eclipse基本操作(1)
1.建立包、建立接口及其他
层级包的显示:平级显示;层级显示
2.工程的高级配置
3.工程的构建
自动编译设定:Project——>Build Automatically
4.代码的自动完成、自动修正功能(在警告或者错误处点击左键,出现解决方案)
黄色的、红色的标示
黄色:警告
红色:错误
传递性...
(1)方法的自动生成
错误处点击左键,选择创建方法
(2)导入import
快捷键:Ctrl + Shift + O
(3)清除无用的import
错误处点击左键,选择删除
(4)自动清除无用的方法、常量
错误处点击左键,选择删除
(5)自动实现接口的、抽象类的方法,自动重载父类的方法
implements extends extends
Source——>重载/实现方法菜单...
点击左边的向上箭头,查看父类信息...
第三讲 Eclipse基本操作(2)
1.Java的调试
(1)断点、条件断点、异常断点
断点:
在左侧双击设置/删除断点,或者右键选择相应菜单设置/删除断点
调试需要通过远程端口进行调试
查看一个变量、表达式值的三种方法:
1.鼠标放置查看处,自动显示
2.右键,Watch菜单,也可以在Watch窗口添加表达式
3.Window——>Show View——>Display,输入表达式,右键,Watch菜单
条件断点:
设置断点后,右键断点,断点属性菜单
异常断点:
运行时异常处,会自动中断
非运行时异常处,不会自动中断,需要在Breakpoints页面加入Java异常断点
(2)断点中变量的查看,语句的执行
2.智能纠错、自动完成
(1)自动生成try...catch,自动列出异常列表,自动转型...
必须捕获的异常,对应必须需要try...catch或者抛出
在红色提示上点击鼠标,常常可以得到惊喜
(2)自动生成set、get方法
Sources——>生成Sets和Gets方法
(3)自动生成构造函数
Sources——>生成构造函数(两个)
(4)javadoc的自动生成
规范Java代码编写!!
在函数上一行,输入 /** 再回车
第四讲 eclipse高级操作(1) 重构
重构不高深——实战重构
1.方法抽取 Extract Method
比如方法首部校验部分的抽取
选中代码——>右键——>Refactor——>Extract Method...,具体设置部分在使用时学习
2.重命名 Rename
重命名类名
选中类名——>右键——>Refactor——>Rename...,具体设置部分在使用时学习
3.内联 Inlining
内联方法
选中函数名——>右键——>Refactor——>Inline...,具体设置部分在使用时学习
4.常量抽取 Extract Constant
将“XXX”抽取成常量
选中常量字符串(包括引号)——>右键——>Refactor——>Extract Constant...,具体设置部分在使用时学习
5.抽取局部变量 Extract Local Variable
将XXX抽取成变量
选中类成员变量——>右键——>Refactor——>Extract Local Variable...,具体设置部分在使用时学习
6.包装字段 Encapsulate Field
不要暴露字段!!
重构XXX类,用set get包装
选中类成员变量——>右键——>Refactor——>Encapsulate Field...,具体设置部分在使用时学习
7.抽取接口 Extract Interface
XXX类中抽取XXX接口
选中类成员方法——>右键——>Refactor——>Extract Interface...,具体设置部分在使用时学习
第五讲 eclipse高级操作(1) 常用技巧
1.
(1)代码完成功能
Alt + /
(2)代码格式化功能
java代码规范
先Ctrl + A选中所有代码——>再Ctrl + Shift + F
设置自定义的格式化风格:
Window——>Preferences——>Java——>Code Style——>Formatter——>New
在Braces页面可以设置大括号的位置
(3)jar包关联源代码
注意:jar包和源代码是分离的
jar包上——>右键——>Preferences——Java Source Attachment——>External File...——>JDK中的src.zip
或者在页面中点击Attach Source按钮
(4)打开类型、查看父类实现、查看类型层次结构、查看方法调用
打开需要查看的类:
Navigate——>Open Type...——>输入需要查询的类名,支持通配符
查看父类实现:
左侧出现向上箭头,点击箭头,查看父类
查看类型层次结构:
选中类名——>右键——>Open Type Hierarchy
查看方法调用:
选中方法名——>右键——>Open Call Hierarchy
2.代码搜索
查找一定的信息
Search——>File...
搜索,工作集等的概念...
有很多种原因,开发人员应该重构代码,例如之前的开发人员代码写得很烂、自己以前设计时有缺陷、需求变更需要添加一些新的功能或修改原有功能等等。Martin Fowler在其著名的<<Refactoring—Improv