zoukankan      html  css  js  c++  java
  • Java集合框架相关知识整理

    1、常见的集合有哪些?
      Collection接口和Map接口是所有集合框架的父接口
        Collection接口的子接口包括:Set接口和List接口
        Map接口的实现类主要有:HashMap、TreeMap、HashTable、ConcurrentHashMap以及Properties等
        Set接口的主要实现类有:HashSet、TreeSet、LinkedHashSet等
        List接口的主要实现类有:ArrayList、LinkedList、Stack、Vector等

    2、HashMap和HashTable的区别?
         HashMap线程不安全,允许将Null值作为key 
         HashTable线程安全,使用了synchronized关键字修饰,不允许将null值设为key

    3、HashMap的底层实现?
         在jdk8之前,其底层实现是数组+链表,jdk8之后使用了数组+链表+红黑树实现

    4、ConcurrentHashMap与HashTable的区别?
         ConcurrentHashMap结合了HashMap和HashTable两者的优势,HashMap线程不安全,HashTable是线程安全的,但是hashTable在每次同步执行时都要锁住整个结构,而ConcurrentHashMap锁的方式是稍微细粒度的,ConcurrentHashMap将hash表分为16个桶,诸如get、put、remove等常用操作只锁住当前需要用到的桶。

    5、List和Set的区别?
         List代表着有序且可以重复的集合
         Set代表着无序的且不可以重复的集合

    6、List、Set、Map的初始容量和加载因子?
         ArrayList的初始容量是10,加载因子为0.5,扩容增量是原来容量的1.5倍,一次扩容后长度为15
         Vector的初始容量是10,加载因子为1,扩容增量是原来容量的2倍,一次扩容后长度为20
         HashMap和HashSet的初始容量是16,加载因子为0.75,扩容增量是元容量的2倍,一次扩容后长度为32

    7、Java集合的快速失败机制“fail-fast”
         快速失败机制是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变操作时,就有可能触发fail-fast机制
         例如:假设存在两个线程(线程A、线程B),线程A通过Iterator在遍历集合C中的元素,在这个时候线程B修改了集合C的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出ConcurrentModificationException异常,从而触发fail-fast机制。
        原因:迭代器在遍历是直接访问集合中的内容,并且在遍历过程中使用一个modCount变量,集合在遍历期间如果结构发生变化,就会改变modCount的值。每当迭代器使用hasNext/next()遍历下一个元素之前,都会检查modCount变量是否为expectedmodCount值,如果一致就返回遍历,如果不一致就抛出异常,终止遍历。

    8、ArrayList和Vector的区别
         vector是线程安全的,使用synchornized关键字修饰实现同步,ArrayList是线程不安全的。
         ArrayList和Vector都有一个相同的初始容量大小,为10,但是负载因子不同,ArrayList的负载因子是0.5,Vector的负载因子是1,所以每一次扩容ArrayList的长度为原来的1.5倍,Vector的长度为原来的2倍

    9、如何去除vector中的重复元素
         HashSet set = new HashSet(vector);

  • 相关阅读:
    019. Remove Nth Node From End of List
    021.Merge Two Sorted Lists
    自定义starter
    servlet里面转发与重定向
    贪婪模式与非贪婪模式
    localstack 线程隔离
    Algorithm & Data structure
    some interview question
    阿里-菜鸟国际-出口大团队招新啦
    JDK8漫谈——集合更强大
  • 原文地址:https://www.cnblogs.com/conswin/p/10381041.html
Copyright © 2011-2022 走看看