第四部分 分布式Java应用与Sun JDK类库

集合包

Java分布式应用:分布式Java应用与Sun JDK类库_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、网络数据的传输。

Java分布式应用:分布式Java应用与Sun JDK类库_线程安全_02