public Vector(int initialCapacity,int capacityIncrement)
ArrayList 和 Vector 都是用数组实现的,主要有这么三个区别:
Vector 是多线程安全的,线程安全就是说多线程访问同一代码,不会产生不确定的结果。
而 ArrayList 不是,这个可以从源码中看出,Vector 类中的方法很多有 synchronized 进行
修饰,这样就导致了 Vector 在效率上无法与 ArrayList 相比;
两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同。
Vector 可以设置增长因子,而 ArrayList 不可以。
Vector 是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
适用场景分析:
Vector 是线程同步的,所以它也是线程安全的,而 ArrayList 是线程异步的,是不安全的。
如果不考虑到线程的安全因素,一般用 ArrayList 效率比较高。
如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数据,
用 Vector 有一定的优势。
1.2.5 HashMap 和 Hashtable 的区别
1.hashMap 去 掉 了 HashTable 的 contains 方 法 , 但 是 加 上 了 containsValue ( ) 和
containsKey()方法。
2.hashTable 同步的,而 HashMap 是非同步的,效率上逼 hashTable 要高。
3.hashMap 允许空键值,而 hashTable 不允许。
注意:
TreeMap:非线程安全基于红黑树实现。TreeMap 没有调优选项,因为该树总处于平衡状态。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
参考:
1.2.6 HashSet 和 HashMap 区别
set 是线性结构,set 中的值不能重复,hashset 是 set 的 hash 实现,hashset 中值不
能重复是用 hashmap 的 key 来实现的。
map 是键值对映射,可以空键空值。HashMap 是 Map 接口的 hash 实现,key 的唯一性是
通过 key 值 hash 值的唯一来确定,value 值是则是链表结构。
他们的共同点都是 hash 算法实现的唯一性,他们都不能持有基本类型,只能持有对象
1.2.7 HashMap 和 ConcurrentHashMap 的区别
ConcurrentHashMap 是线程安全的 HashMap 的实现。
(1)ConcurrentHashMap 对整个桶数组进行了分割分段(Segment),然后在每一个分段上都
用 lock 锁进行保护,相对于 HashTable 的 syn 关键字锁的粒度更精细了一些,并发性能更
好,而 HashMap 没有锁机制,不是线程安全的。
(2)HashMap 的键值对允许有 null,但是 ConCurrentHashMap 都不允许。
1.2.8 HashMap 的工作原理及代码实现
简单地说,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个
Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存
储一个 Entry 对象时,会根据 hash 算法来决定其在数组中的存储位置,在根据 equals 方法
决定其在该数组位置上的链表中的存储位置;