个人面试总结-集合

面试题总结

1 java 提供的集合工具有哪些

  • List常用的有ArrayList,LinkedList

       ArrayList的底层实现是数组,LinkedList底层采用链表实现;

  • Map常用的有 HashMap,LinkedHashMap,Hashtable,ConcurrentHashMap

         HashMap:底层采用数组+链表的形式实现,非线程安全的;

         LinkedHashMap:底层同样采用数组+链表的形式实现,但是在遍历的时候可以保证插入的顺序,这一点HashMap是做不到的,它还有一            个比较好的功能是可以当做LUR队列使用,同样是非线程安全的;

         Hashtable:和HashMap实现基本一样,但是它是线程安全的,只是在方法中加了同步关键字synchronized;

         ConcurrentHashMap,底层同样采用数据+链表,但是它是线程安全的;

        TreeMap:底层采用红黑树,实现了按照key的排序

         Map在JDK7和JDK8略有区别:第一,JDK8在列表长度超过8的时候会转化为红黑树,提高查询性能,第二个是ConcurrentHashMap的并发          实现略有区别,JDK7是分段锁,意思是每一把锁会锁住Map数组的一段,而JDK8做了优化,直接在每一个数据头加了同步,这样并发能力            大大提高;一般面试的时候如果回答7和8的区别,个人觉得会加分,当然7和8的区别有很多,这里只是列举了和Map相关的点

扫描二维码关注公众号,回复: 1007792 查看本文章

          Map的put过程:忘Map中put的时候会用到Object的俩个函数equals,hashCode,既然说到这俩个函数,那就啰嗦的说一下这俩个函数             的联系吧,equals是比较俩个对象的相等,hashCode是按照某种算法得到一个对象的hash值,如果俩个对象的equals相等,hashCode必             需相等,hashCode相等,equals可以不相等,所以小伙伴们在实现自定义的对象是,一定要注意喽,言归正转,Map的put很简单,就是             先求对象的hashCode,然后找到对应的Map下数组的首元素,然后依次和首元素挂的链表想比较,比较久用到了equals函数,如果相等,           直接替换,否则挂到列表的尾部,如果当前链表已经转化为红黑树了,则按照红黑树的插入逻辑执行即可

         

  • Set常用的有HashSet,LinkedHashSet,TreeSet  

        HashSet:底层采用HashMap, HashMap的key用来存放Set的值,HashMap中的所有value值对应同一个Object的对象

        LinkedHashSet:底层采用LinkedHashMap,可以实现插入的顺序

        TreeSet:底层采用的TreeMap

        

2 集合的扩容

    ArrayList默认10,达到以后会进行扩容,LinkedList不存在扩容问题,HashMap默认16,达到后也会扩容


猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/80208302