ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

面试必问 Java集合框架

2022-01-30 23:02:41  阅读:175  来源: 互联网

标签:必问 Java HashMap ArrayList List 面试 Hashtable 集合 LinkedList


集合

1. java有哪些常用容器?

核心: java容器分为Conllection和Map两大类
>分支1:
           Conlllection有List集合和Set集合
分支1-1-0:
           List集合:ArrayList集合(基于数组实现的有序集合),LinkedList(基于链表实现的有序集合),AbstractList(有序集合的最小化抽象实现),Vector
分支1-1-1:
           Set集合:AbstratSet(不重复集合的最小化抽象实现),HashSet(基于hash实现的不重复集合,无序),LinkedHashSet(基于hash实现的不重复集合,有序),TreeSet(基于红黑树实现的可排序不重复集合)
           Queue------略
分支2:
           Map集合
分支2-1-0:
           AbstratMap(键值映射集合最小化抽象实现),Hashtable(基于哈希表实现的健值映射集合,key,value均不可为null),HashMap(类似于Hashtable,但是方法不同步,key,value可为null),LinkedHashMap(根据插入顺序实现的健值映射集合)。

2. ArrayList和Vector的联系和区别是什么?

相同点:
底层都是使用数组进行实现的,他们的功能相同,增删改查等操作的方法相似,都是长度可变的数组结构
不同点:
Vector是早期JDK版本提供的,ArrayList是新版本替代Vector的。
Vector的方法都是i同步的,线程安全;ArrayList是非线程安全的,但是性能比Vector好
默认初始容量都是10,Vecotor扩容默认会翻倍,可指定扩容的大小;ArrayList只增加50%

3. Collection和Collections有什么区别?
Collection是JDK中集合层次结构中的最根本的接口。定义了集合类的基本方法。Collections是一个包装类。它包含了各种有关的集合操作的静态多态方法,不能实力话,它是Collection集合框架的工具类。
4. List Set Map之间的区别是什么?
List是有序集合,元素可以重复
Set是不可重复集合,LinkedhashSet按照插入排序,HashSet无序。
Map是键值对集合,存储健,值,和之间的映射;key无序,唯一。value不要求有序,允许重复

5.HashMap和Hashtable有什么区别?

线程安全性不同。HashMap是非线程安全的,Hashtable是线程安全的
key,value是否允许null值。HashMap的key,value允许null,Hashtable的key和value都不允许null值。
迭代器不同。HashMap使用的是fail-fast迭代器;Hashtable还使用了enumertor迭代器。
hash的计算方式不同。HashMap计算了hash值;hashtable使用了key的hashCode方法。
默认的初始大小和扩容方式不同。HashMap默认初始大小为16,容量必须是2的整数次的幂,扩容时将同量变为原来的2倍;Hashtable默认初始大小是11,扩容将容器变为原来的2倍+1
是否有conatins方法。HashMap有,Hashtable没有
他们俩不是同一个爹。HashMap的爹是AbstratMap;Hashtable的爹是Dictionary。

6. 如何决定使用HashMap还是TreeMap?

HashMap基于散列桶(数组+链表)实现;TreeMap基于红黑树实现。
HashMap不支持排序;TreeMap默认是按照Key值升序排序的,可指定排序的比较器,主要用于存入元素进行自动排序。
HashMap大多数情况下有更好的性能,尤其是读数据。在没有排序要求的情况下,使用HashMap。

7. ArrayList和LinkedList的区别是什么?

底层:
区别1-----实现。ArrayList基于数组实现的,LinkedList基于链表进行实现的
区别2-----扩容。ArrayList初始化长度10,扩容之后是原来的1.5倍。LinkedList不存在扩容空间,新增元素放在集合尾部,修改响应的指针节点即可。
区别3----内存。LinkedList比ArrayList更占内存空间,因为LinkedList为咩一个节点存储了两个引用节点,一个指向前一个元素,一个指向下一个元素。
区别4-----查找,删除。ArrayList是根据数组下边直接找到元素,所以这个集合查找数据比较快。LinkedList如果要是查找的话是遍历每个元素直到找到为止。当对数据更改的时候LinkedList要比ArrayList强势,毕竟他是使用链表进行存储数据的,当我们进行新增或者删除数据的时候,他是直接修改元素的指针就可以了,但是ArrayList 新增 也好 删除也罢,往后的数据都得重新进行更改。

这俩集合都是非线程安全的,允许存放null

  1. 如何实现数组和List之间的转换?

数组->List (java.util.Arrays的 asList方法)
List->数组(List的toArray方法)

8.迭代器iterator是什么?

迭代器他是Java中常用的设计模式之一。用于顺序访问集合对象的元素,无序知道集合对象的底层实现。
itrator是可以便利集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。
缺点就是增加新的集合类需要对应增加新的迭代器类,迭代器类与集合类成对增加。

标签:必问,Java,HashMap,ArrayList,List,面试,Hashtable,集合,LinkedList
来源: https://blog.csdn.net/qq_43792118/article/details/122755946

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有