集合相信大家都已经不陌生了,以下说的几点是薄主面试中遇到的总结。。。
先说下集合这个大体系,分为单列集合,有list:有序可重复 ,不指定长度,默认10(会新建10 个数组),自动扩容0.5倍+1=16。 arraylist底层是数组,线程不同步,效率高,有了索引查询快,相对其他而言的话增删改慢了就。linkedlist底层链表结构 增删快,线程不同步,但是查询就慢了。
还有set无序不可重复。hashset,底层是哈希表,不同步效率高,比较是否相同的话先比较哈希值hashcode是否相同,如果相同再去比较equals元素是否相同。 treeset底层是二叉树,不同步效率高。
再说双列集合map :默认长度是16 ,有负载因子,长度的0.75倍,也就是说当长度大于16*0.75=12就会自动扩容2倍,这个时候的长度就是32。
hashmap是jdk1.2以后出来的,是根据hashcode值进行存数据的,根据键获取值的,线程不同步,多个线程去操作一个hashmap,效率高,允许一个key为空多个value为空。解决线程同步问题,我们可以用synchronizeMap方法返回一个map对象让hashmap有同步能力,来解决线程安全问题。
hashtable继承了dictionary类,线程同步安全的,只允许一个线程去访问hashtable,存取速度没有hashmap快。
treemap:底层二叉树,线程不同步,高效,给集合中的键排序。
基本上先说这么多,毕竟是两年工作经验,后续有深入研究陆续更新。