今天看到群里大佬讨论hashmap谈到java设计,
以前写题的时候也注意到了一些奇怪的地方,比如Queue和Stack
Queue是一个接口,而Stack是一个类…
Stack是java第一个版本的时候发布的继承自Vector
而Queue继承自Collection.
注意到是不推荐Stack的,于是就好奇的搜了下原因.
因为Vector也是不推荐使用的?所以不推荐Stack类,建议使用Deque
而Vector不推荐使用的原因大致如下
1: vector是线程安全的,效率较低,在需要保证线程安全的方法上都加了synchronized
然而这样并没有很好的解决线程安全问题
if (!vector.contains(element))
vector.add(element);
} 在判断是否包含某元素后, 会释放锁,在不包含的情况下,执行add之前,锁很有可能会被抢占。
2: 扩容的时候是扩容一倍,内存不可复用,而ArrayList是一半.
3: Vector分配内存是连续的存储空间,如果数据太多,容易分配内存失败
4: 只能在尾部进行插入和删除操作,效率低
2020-11-6Java-Stack和Queue随笔
最新推荐文章于 2024-08-29 18:44:48 发布