我是架构师-常用类型-容器-不再推荐的容器

Vector
Vector实现了同步,在所有方法加入了同步锁synchronized,基本都是整个方法同步。
这是个不好的实现,在并发量增大时,会带了无法忍受的开销,除此以外,他的缺点多到难以描述。
推荐取代:ArrayList。
显然ArrayList没有实现同步,但大多数情况下,我们不需要同步。如果需要,可以多种方式:
1. Collections.synchronizedList(List<T> list);
2. 使用CopyOnWriteArrayList,他比第一种方式更高效,尤其在只读取时。
3. 你可以尝试自己在关键地方加入锁机制,但是这并不推荐。 

HashTable
与Vector一样的同步方式,推荐用HashMap取代
同步方式:
1. Collections.synchronizedMap(Map<K,V> m)
2. ConcurrentHashMap 
3. 非常准确的把握在关键处加入锁同步

Enumeration
从java1.0起 他就存在,主要服务于HashTable,Vector等,
推荐:Iterator 

java.util.Stack
java中栈的概念。继承了Vector, 你永远都不应该使用他。
尝试用LinkedList替代,或者自己重新写一个,利用LinkedList。

BitSet
这个类 用于高效的存储大量“开/关”信息,节省了空间,但是如果访问速度,稍逊于数组。
通过源码可以发现,BitSet 用的是long数组储存值,也就是说,这个BitSet最小容量是64位。实际上,在小于64位的时候,long数组始终只有一个值,set和get时通过该值位比较进行改变数组的值,长度只有在大于64才调用其他方式,这里就不多介绍了。
替换:
1. EnumSet  jdk的描述:枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
除非你运行时才知道需要多少标志位,或者需要BitSet的某种操作,否则推荐EnumSet 
2. 通过自己实际需求,定义其他类型进行位比较,显然64在很多行为中是个不小的数了。 

在此,小小建议:
jdk的升级会不断的改进和优化,所以对于一些标识@Deprecated的方法,即过时或者不推荐,就尽量避免再使用,因为可能新版本的更新给你项目带来难以想象的灾难。

你可能感兴趣的:(java,淘汰的容器)