java集合

来源:互联网 发布:知柏地黄丸女性能吃吗 编辑:程序博客网 时间:2024/05/21 02:48
一 . Java集合框架的基本接口有哪些?
        1.Collection接口 :单列集合
            List接口
                    ArrayList :底层是数组,存在角标,增删快
                    LinkedList:链表式结构,无索引,查询快
                    Vector :线程安全的
            Set接口 Hashset :无序的,值唯一
                         HashSet就是个简化的HashMap的,查看源代码,HashSet里面的HashMap所有的value都是同一个Object,也是非线程安全的.

        2.Map接口 :双列集合,key、value形式
                    HashMap :线程不安全的,key可以为null
                    HashTable:线程安全的,key不可以为null


二 .HashMap和Hashtable的区别?
        1.hashTable是线程安全的,而hashMap是非线程安全的,性能会更高.
            因为Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合
        2.HashMap存储是无序的,但是null作为key值时存储在第一位.hashTable的key值不可以为空.
        3.HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类
        4.HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75
          HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1
        5.两者计算hash的方法不同
            Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模.
            HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取摸.
         6.HashMap和Hashtable的底层实现都是数组+链表结构实现