目录Java常用类、集合、IO常用类Object
Math
Random
File
包装类
Data
String
StringBuffer
StringBuilder
集合框架CollectionList(有序可重复)ArrayList数组 (常用)
LinkedList链表 (常用)
Vector
Stack
Set(无序不可重复)HashSet(常用)
TreeSet
Iterator迭代器
MapHashMap(重点,天天用)
TreeMap
Collections工具类
泛型
IO流字节流
字符流(中文必须用字符流)
处理流
序列化/反序列化
Java常用类、集合、IO
常用类
Object
hashCode()
toString()
clone()
getClass()
notify()
wait()
equals()
Math
常用的数学运算
Random
生成随机数 UUID
File
创建文件
查看文件
修改文件
删除文件
包装类
自动拆箱装箱
Data
Data
SimpleDateFormat yyyy-MM-dd HH:mm:ss
Calendar(建议使用)
String
不可变性 final
操作量较少
StringBuffer
可变长 append()
多线程数据量较大 线程安全 效率高
StringBuilder
可变长
单线程数据量较大 线程不安全 效率低
集合框架
Collection
List(有序可重复)
ArrayList数组 (常用)
add()
remove()
contains()
size() ...
LinkedList链表 (常用)
getFirst() addFirst() removeFirst()
getLast() addLast() removeLast()
pop() push() ...
Vector
Stack
Set(无序不可重复)
HashSet(常用)
TreeSet
Iterator迭代器
Map
HashMap(重点,天天用)
JDK 1.7 数组+链表
JDK 1.8 hash表 = 数组+链表+红黑树
为什么链表长度在大于8的时候变成红黑树?
答:如果链表的长度没有达到这个长度的话,因为红黑树它自身的这种维护,插入的这种维护的开销也是非常大的,因为每次去插入一个元素的时候,很有可能会破坏掉它的平衡。也就是说hashmap的put操作非常多的时候,极有可能会影响插入的性能,因为插入一个元素的话,即有可能会打破它原有的平衡,那么每时每刻它都需要在恢复平衡(也就是红黑树的再平衡,需要左旋右旋,以及重新着色),就非常影响性能。
为什么数组的长度必须是2的指数次幂?
解释:Hashmap为了实现存取高效,要尽量减少碰撞,就是要尽量做到:把数据分配均匀,保证每个链表长度大致相同,我们就需要一个算法来实现;将存入的数据保存到那个链表中的算法;而这个算法实际就是取模:hash%length
? 但是,大家都知道这种运算不如位移运算快。因此,源码中做了优化 hash&(length - 1) 也就是说hash%length = hash&(length - 1)
那为什么是2的n次方呢?
因为2的n次方实际就是1后面n个0,而2的n次方-1,实际就是n个1
例如:长度为8时候,3&(8-1)=3 2&(8-1)=2 不同位置上,不碰撞。而长度是5的时候 3&(5-1)=0 2&(5-1)=0 都在0上,出现了碰撞。所以保证容积是2的n次方,是为了保证再做(length-1)的时候,每个位都能&1,也就是和1.....1111进行与运算。
0.75??
TreeMap
Collections工具类
泛型
约束,避免类型转换之间的问题
IO流
字节流
输出 OutputStream
输入 InputStream
字符流(中文必须用字符流)
Reader
Wirter
处理流
buffer
BufferOutputStream
BufferInputStream
BufferedWriter
BufferedReader
Data
DataOutputStream
DatarInputStream
转换流
InputStreamReader
OutputStreamWriter
Filter
FilterInputStream
FilterOutputStream
FileWriter
FilterReader
PrintStream
PrintWriter
序列化/反序列化
Serializable 接口
transient 关键字 (透明的 某个参数不需要序列化 )
Java常用类、集合、IO-简单版