面试题:List、Map、Set的区别

对每个接口都用同一套模板来进行回答。
即从主要功能、特征、实现三个方法面

Set接口

Set接口拓展了Collection接口,是最简单的一种集合。

主要功能:
存入Set中的元素都必须是唯一的,不含有重复元素,加入Set的元素都会经过equals的方法确认对象的唯一性。

特性:

  • 只允许存放一个null元素
  • Set是一个无序的容器,无法保证元素的存储顺序。

实现:
Set接口主要的两个实现是HashSet和TreeSet。其中TreeSet还是实现了SortedSet接口,可以根据compare来对容器进行排序。

List接口

List接口也拓展了Collection接口,也可以叫有序集合。

主要功能:

  • 精确控制元素的插入位置
  • 通过索引访问元素
  • 搜索列表中的元素。

特性:

  • 集合中可以存储重复的元素,包括null值
  • 是有一个有序的容器,线性方式存储元素,输出顺序即插入顺序

实现:
List接口常用的实现有三个,分别是ArrayList、LinkedList和Vector。
ArrayList用数组实现,可以使用索引随机访问。
LinkedList用链表实现,更适合用在随机位置插入。
vector是ArrayList的线程安全版本。

Map接口

Map接口不是从Collection接口扩展的,他也叫映射表,每一个元素都有一个键对象和值对象,

主要功能:
只要给出键对象就会返回对应的值对象。

特性:

  • 可以有相同的值对象,但是键对象一定是独一无二的。
  • 同理,null值只能有一个键,值对象可以有无数个null。

实现:
Map接口比较实用的三个实现分别是HashMap、Hashtable、TreeMap。
其中TreeMap是基于“红黑树”数据结构来实现的,查看键值对的时候他们会被排序。
Hashtable是HashMap的线程安全实现版本。

总结

如果想要经常按照索引访问元素,就使用ArrayList。

如果要经常性地插入元素,那要使用LinkedList。

如果要保证插入元素的唯一性,就要选择一个Set的实现类。

如果要以键值对的形式保存元素,Map接口是最好的选择。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值