总结面试经常问到的java集合框架

简介:集合是程序员经常用到但很少人能弄的清楚它们之间的关系,也面试官会经常问这类的问题,这篇文章会给你带来收获噢~

首先

     什么是集合?

           简单的来说集合就是一个方数据(对象引用)的容器。它包括我们常见的List、Set、Map等,那他们之间的关系呢请看下面的这幅图:

iterator方法有三个常用属性:

              hasNext():是否存在下一个;

              next():获取下一项;

              remove():删除有next()最新返回的项。

Conllection接口常用的方法:

              size():返回集合中的项数;

              isEmpty():判断集合中是否为空

              contains(Object):判断集合中是否包含某项

              clear():从集合清除某项

              add():从集合添加某项

              remove(Object):从集合中删除某项

             iterator():遍历集合

那么问题一来了:Iterator接口的remove()与Conllection接口的remove()方法有什么区别?

          从3个点回答:

                1,参数方面:iterator的remove不带参而Conllecion接口的remove带参;

                2,性能方面:Conllection接口的remove方法先采用单链表结构一个一个遍历的找到再删除,所以效率低;

                                        Iterator的remove方法结合了next()方法使用直接删除,所以效率高。

                3,容错方面:使用Iterator遍历时,Conllection的remove会报异常(原因:首先Conllection就是一个集合,调用iterator时又创建了一个集合,而再集合里面remove,只是移除了你创建的集合,而原来的Conllection集合里面的元素没变,个数不一样,所以会报异常),而Iterator遍历不会,因为iterator内部的对象的个数和原来的个数一样。

问题二:List、Set、Map之间的区别?

ListSetMap
继承Collection接口继承Collection接口不继承Collection接口
重复/有序不重复/无序无序/键值对存储,键唯一,值可重复
可以插入多个null只能插入一个null键只允许一个null值可以有多个null

问题三:ArrayList(数组结构)与LinkedList(链表结构)的区别?

        ArrayList:

            优点:get和set调用花费常数时间,也就是查询的速度快;

            缺点:添加删除的速度慢。

      LinkedList:

           优点:添加和删除的速度快;

           缺点:对get和set的调用花费昂贵,不适合做查询。

问题四:HashSet、TreeSet、LinkedHashSet的区别?

       1,需要速度快的集合,使用HashSet;

       2,需要集合有排序功能,使用TreeSet;

       3,需要按照插入的顺序存储集合,使用LinkedHashSet。

问题五:HashMap、TreeMap、linkedHashMap的区别?

       1,HashMap查询速度最快;

       2,TreeMap有集合有排序功能;

       3,需要按照插入的顺序存储集合,用LinkedHashMap;

那么引发了问题六:HashMap与HashSet的区别?

      

HashMapHashSet
实现了Map接口实现了Set接口
存储键值对存储对象
添加元素用put()方法添加元素用add()方法
使用key计算hashcode使用成员对象计算hashcode
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象HashSet较HashMap来说比较慢

问题七:HashMap的实现原理?

       首先HashMap继承了Map集合,通过put和get存储和获取对象,存储对象时,我们将K/V传给put方法时,它调用hashcode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量。如果容量超过了默认的容量会按16*0.75=12来扩充,16表示初始数量,0.75表示容量因子,获取对象时,我们将K传递给get,他调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对。

问题八:Array与ArrayList有什么区别?(问的是数组与集合的区别)

       实例化Array时会定义一个容量大小和数据类型,长度是固定的,而且只能存储相同数据类型的数据。

       而ArrayList可以存储不同数据类型的数据,长度是可变的。

问题九:怎样将一个数组转化为List,list转化为数组?

       数组转化为List:Arrays.asList(数组)

       list转化为数组:list.toArray()

好了,今天就总结到这里了。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值