Java常用类集合IO-简单版
Posted ls-summer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常用类集合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
- Print
- PrintStream
- PrintWriter
序列化/反序列化
Serializable 接口
transient 关键字 (透明的 某个参数不需要序列化 )
以上是关于Java常用类集合IO-简单版的主要内容,如果未能解决你的问题,请参考以下文章