集合 list、set、Map

相信很多刚毕业的同学包括初级程序员和求职的过程中,经常会被问到集合相关的知识。我觉得该文只是对集合的一个简单的介绍,更加深的学习还是要大家查找一些资料去学习。

一:谈谈你对集合的理解?

 

二:说一下List、set、map的区别?

列表,集合,映射(K,V)

讲一下list和set之间的相似性,list和set都是单列集合,他们有一个共同的父接口---collection。list是依次有序列出一个结合中的所有的元素,若集合中有重复的,同样列出;set列出的集合中是不允许有重复的,也就是说里面有一个A对象和一个B对象,若是A.equals(B)==ture,那么用set方法列出的只会有一个,set集合默认是有序的,正向排序。一般遍历set里面的元素时使用iterator。另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。

map<key,value> 它是一个双列的集合。存放的是键与值的映射,其中键是唯一的(不能有重复对象),而值可以有重复的对象,存的时候,需要指定键和对应的值,取的时候可以根据键名取到值,也可以遍历。

至于在什么时候使用,这个是要因地制宜的。
列表,在能直接使用数组的时候,就有使用列表,如一个班的学生的成绩,成绩是可以重复的;
集合,一般用于存放无序的(指顺序不重要)不能重复的对象,如一个班的学生的学号,学号是不能重复的;
映射,用于存放具有对应关系的键值对,如一个班的学生的学号与姓名的映射,每个学号对应了一个学生的姓名,学号不能重复,但是姓名可能会重复;

三:聊一下ArrayList和LinkedList的区别和实现原理?

Arraylist:
优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。
缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。   
LinkedList:
优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景
缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
适用场景分析:
 当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时采用LinkedList。
 

四:hashMap用过吧,说一下它的实现原理吧!(hashtable)

HashMap 非线程安全  
HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 

五:线程安全集合类与非线程安全集合类 
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的,效率低,已经不怎么使用了;
HashMap是非线程安全的,高效,支持null;,HashTable是线程安全的,低效,不支持null;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

很多时候是知道这些知识,但面试的时候说不出来,所有还是都要自己去整理一遍,会理解的一些,再用自己的方式去讲。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值