java 常用面试题精选----集合部分

Collection和Collections有什么区别?

Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set和List;

Collections是java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

List底层是怎么实现的?双向链表和数组的区别?

在Java中List是一个接口,继承于Collection接口,并定义了添加元素,删除元素,取出元素等对集合操作的抽象方法。

双向链表与数组的区别为:

1.数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数组增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。

2.链表动态的进行存储分配,可以适应数据动态的增减的情况,且可以方便的插入、删除数据项;而数组中插入、删除数据项时,需要移动其他数据项,非常繁琐。

 

简述HashTable原理,并说明它和HashMap区别?

HashTable原理:HashTable是基于哈希表的实现。通过使用put方法把对象进行关联,需要时用get取                            得与key关联的值对象。还可以查询某个对象的索引值等等。

二者都实现了Map接口,主要区别在于:

1.HashMap没有排序,允许一个null键和多个null值,HashTable不允许;

2.HashMap把HashTable的contains方法去掉了,改成containsvalue和containskey

3.HashTabl继承自Dictionary类,HashMap是Java1.2引进的Map接口的实现

4.HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供同步。

 

HashMapHashSet有什么关系?

放进HashSet中对象,其实是用这个HashMap的key来存储的。当调用HashSet的add方法时,实际是向HashMap中增加了一行(key-value对),该行的value就是一个Object类型的常量。

 

ArrayListLinkedList的大致区别如下:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

 

ListSetMap的区别?

1List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

2Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

3Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

转载于:https://my.oschina.net/u/3901870/blog/1841026

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值