第四部分 分布式Java应用与Sun JDK类库
集合包
CollectionList接口:
List接口:List(有序、可重复)的实现类有ArrayList、Vector、LinkList ArrayList、Vector底层是通过数组实现的,LinkList是通过双向链表实现的。Vector支持线程同步(Stack栈是实现Vector)。
Set接口:Set(无序、不可重复)实现类有 HashSet(基于HashMap,可以为null)和TreeSet(基于TreeMap,不可为null)HashSet和TreeMap都是非线程安全的。
Queue接口: Queue:实现类有 Deque:底层是是数组,有2个标志位指向数组的头与尾实现双端队列。
Map接口:
HashMap(不支持排序)
- 采用数组方式存储key、Value构成的Entry对象,无容量限制
- 基于key hash进行对象的定位,对于hash冲突采用链表法或者开放地址法来解决
- 当需要扩大数组容量时,要重新计算hash值
- HashMap是线程非安全的
TreeMap(支持排序)
- 基于红黑树实现,无容量限制
- 非线程安全的
- 支持排序的
Hashtable
线程安全的
HashMap和HashTable的区别:
1.HashMap 对象的 key、value 值均可为 null。 HahTable 对象的 key、value 值均不可为 null。。
2.HashTalle是线程安全的,而HashMap不是线程安全的。
3.Hashtable直接使用对象的hashcode,HashMap重新计算hash值。
4.HashTable使用Enumeration,而HashMap使用Iterator.
Enumeration只能Read-Only模式,不可进行删除。
总结:
1.集合只有Vector和Hashtable是线程安全的(其他集合可以使用Collections.syschronied***()进行线程同步)
2.集合中实现List接口和TreeMap、Linkhashmap支持排序 (利用Collections.sort(集合,比较器))
并发包
常见集合实现同步的方式:
HashMap:ConcurrentHashMap是线程安全的HashMap的实现。
ArrayList:CopyOnWriteArrayList是线程安全、并且在读操作时无锁的ArrayList。
Set:CopyOnWriteArraySet基于CopyOnWriteArrayList而现实。 (每次add 会遍历查重 性能比较差)
Queue:ArrayBlockingQueue是一个基于数组、先进先出、线程安全的集合类,可以指定时间阻塞,并且容量是可限制的。
序列化和反序列化
ByteArrayOutputStream /ByteArrayInputStream ObjectOutputStream/ObjectInputStream
把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
用途:文件的copy、网络数据的传输。