面试题:Java中的集合,总结list,set,map之间的区别

关于Collection与Collections:

  • Collection:集合层次结构中的根接口。
  • Collections: 完全由操作或返回集合的静态方法组成,包含操作集合的多态算法。Collections工具类提供了Set、List、Map进行排序、填充、查找元素的辅助方法。

先上两张常用集合图:
Collection
在这里插入图片描述

关于List、Set、Map接口:

  • List:
    • 继承Collection接口;有序集合,允许重复元素。
    • 这个接口的用户可以精确地控制列表中每个元素插入的位置。
    • 用户可以通过其整数索引(在列表中的位置)访问元素,并在列表中搜索元素。
    • 提供了一个特殊的迭代器,称为ListIterator,它允许插入和替换元素,除了迭代器接口提供的正常操作外,还提供双向访问。
  • Set: 继承Collection接口;无序集合,不允许重复元素,且最多有一个null值。
  • Map: key_value键值对;不允许重复元素。

关于ArrayList、LinkedList、Vector:

  • ArrayList:

    • 实现List接口;允许null值,这个类大致相当于Vector,只是它是不同步的。
    • 在内存中分配连续的空间,在遍历元素和随机访问元素时效率高。
  • LinkedList:

    • List和Decode接口的双链表实现;允许null值,与ArrayList类似,不同步。
    • 链表存储方式,在插入,删除元素时效率高,提供额外的addFist(),addlast(),removeFirst(),removeLast(),索引到列表中的操作将从开头或结尾遍历列表,以较接近指定索引为准。
  • Vector

    • 实现可扩展的对象数组,同步。像数组一样,它包含可以使用整数索引访问的组件。但是,Vector矢量的大小可根据需要增大或缩小,以便在创建“矢量”后添加和移除项目。

    • Vector中最后一个元素后面的任何数组元素都为null。

    • 存储矢量分量的数组缓冲区, 矢量的容量是这个数组缓冲区的长度,并且至少足够大以包含所有矢量的元素。

关于HashMap、HashSet:

HashMap: 继承Map接口,实现了哈希表,允许null,非同步。哈希表结构其实就是数组+链表;在JDK1.8中规定:当链表长度大于8时,链表长度就转换为红黑树,大大提高了查找效率。
HashSet: 继承Set接口,实现了由哈希表支持的Set接口,只能放入一个null元素,不同步。实际上是一个HashMap实例。

关于数组与链表:

  • 数组:占用空间连续。寻址容易,查询速度快,但是,增加和删除效率低。
  • 链表:占用空间不连续。寻址困难,查询速度慢,但是,增加和删除效率高。
  • 数组+链表:综合,查询速度快,增删速度也快。
    下图分别为数组,LinkedList,HashMap:
    结构示意

图片都是自己画的,大家将就看吧,哈哈哈~
主要是个人总结,有什么不对的地方请纠正~
来源于网络尚云堂以及源码解读~

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值