建立三个String对象,以下图所示html
hashCode():是根据内存地址按hash算法得出的一个正数java
若equals()为true,hashCode()也为true
若hashCode()为true,equals()不必定为true,由于可能存在hash冲突(几率较低)算法
以HashSet为例确保添加的元素是不重复的:编程
若是在存储的时候逐个equals()比较,效率较低,哈希算法提升了去重复的效率,下降了使用equals()方法的次数设计模式
boolean equals(Object obj) boolean equalsIgnoreCase(String str) boolean isEmpty() boolean contains(String str) boolean startsWith(String str) boolean endsWith(String str)
int length() char charAt(int index) int indexOf(int ch) int indexOf(String str) int indexOf(int ch,int fromIndex) int indexOf(String str,int fromIndex) String substring(int start) String substring(int start,int end)
byte[] getBytes() char[] toCharArray() static String valueOf(char[] chs) static String valueOf(int i) String toLowerCase() String toUpperCase() String concat(String str)
String replace(char old,char new) String replace(String old,String new)
String trim()
int compareTo(String str) int compareToIgnoreCase(String str)
表示该类不能被继承,请谨慎使用,若非该类已十分明确不会被继承或出于安全方面考虑,并不建议设计为final类安全
表示该方法不能被子类重写(覆盖),但可以被重载,即在子类中能够建立多个与final方法方法名相同,但参数不一样的方法
注意若父类中final方法的访问修饰符为private,那么子类是不会直接继承父类的final方法的,那么这时在子类中建立相同的方法名与参数是不会有final冲突的服务器
final修饰变量是较为常见的,也是这里须要重点学习的部分
final修饰变量表示该变量仅能被赋值一次,赋值后值再也不改变架构
处理流:在字节流的基础上进行了功能的扩展或增强,又分为如下两种并发
扩展:关于缓冲流,这里涉及到了设计模式中的装饰者模式,其做用即基于已有功能基础上,提供加强的功能异步
其实现思路以下:
先结合生活场景简单介绍下同步、异步、阻塞、非阻塞,以银行取款为例:
同步且阻塞,服务器实现模式为一个链接一个线程,即客户端有链接请求时服务器端就须要启动一个线程进行处理,若是这个链接不作任何事情会形成没必要要的线程开销,固然能够经过线程池机制改善
BIO方式适用于链接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4之前的惟一选择,但程序直观简单易理解
同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的链接请求都会注册到多路复用器上,多路复用器轮询到链接有I/O请求时才启动一个线程进行处理
NIO方式适用于链接数目多且链接比较短(轻操做)的架构,好比聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持
异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理
AIO方式使用于链接数目多且链接比较长(重操做)的架构,好比相册服务器,充分调用OS参与并发操做,编程比较复杂,JDK7开始支持
扩展:Netty为何使用NIO而不是AIO?
Netty不看重Windows上的使用,在Linux系统上,AIO的底层实现仍使用EPOLL,没有很好实现AIO,所以在性能上没有明显的优点,并且被JDK封装了一层不容易深度优化
Files.read() 读取文件 Files.write() 写入文件 Files.exists() 检测文件路径是否存在 Files.createFile() 建立文件 Files.createDirectory() 建立文件夹 Files.delete() 删除文件或者目录 Files.copy() 复制文件 Files.move() 移动文件 Files.size() 查看文件个数