Java集合2

1、ArrayList 与 Vector 区别呢?为什么要⽤Arraylist取代Vector呢?

ArrayList 是 List 的主要实现类,底层使⽤ Object[ ] 存储,适⽤于频繁的查找⼯作,线
程不安全 ;
Vector 是 List 的古⽼实现类,底层使⽤ Object[ ] 存储,线程安全的。

2、HashMap 和 Hashtable 的区别

  1. 线程是否安全: HashMap 是⾮线程安全的, HashTable 是线程安全的,因为 HashTable 内
    部的⽅法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使⽤
    ConcurrentHashMap 吧!);
  2. 效率: 因为线程安全的问题, HashMap 要⽐ HashTable 效率⾼⼀点。另外, HashTable
    基本被淘汰,不要在代码中使⽤它;
  3. 对 Null key 和 Null value 的⽀持: HashMap 可以存储 null 的 key 和 value,但 null 作为
    键只能有⼀个,null 作为值可以有多个;HashTable 不允许有 null 键和 null 值,否则会抛出
    NullPointerException 。
  4. 初始容量⼤⼩和每次扩充容量⼤⼩的不同 : ① 创建时如果不指定容量初始值, Hashtable
    默认的初始⼤⼩为 11,之后每次扩充,容量变为原来的 2n+1。 HashMap 默认的初始化⼤
    ⼩为 16。之后每次扩充,容量变为原来的 2 倍。② 创建时如果给定了容量初始值,那么
    Hashtable 会直接使⽤你给定的⼤⼩,⽽ HashMap 会将其扩充为 2 的幂次⽅⼤⼩
    ( HashMap 中的 tableSizeFor() ⽅法保证,下⾯给出了源代码)。也就是说 HashMap 总
    是使⽤ 2 的幂作为哈希表的⼤⼩,后⾯会介绍到为什么是 2 的幂次⽅。
  5. 底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了᫾⼤的变化,当链表⻓度
    ⼤于阈值(默认为 8)(将链表转换成红⿊树前会判断,如果当前数组的⻓度⼩于 64,那么
    会选择先进⾏数组扩容,⽽不是转换为红⿊树)时,将链表转化为红⿊树,以减少搜索时
    间。Hashtable 没有这样的机制。
posted @ 2021-06-04 21:32  Nevesettle  阅读(48)  评论(0编辑  收藏  举报