List和Set面试题

1. ArrayList 和 LinkedList 的的相同点和不同点分别是什么?

相同点

  • ArrayList 和 LinkedList 都是 List 接口的实现类,因此都具有 List 的特点,即存取有序,可重复;而且都不是线程安全的。

不同点

  • ArrayList 基于数组实现,LinkedList 基于双向链表实现。

ArrayList 适合查询多(读多)的场景,LinkedList 适合插入多(写多)的场景。

2. List、Set、Map 之间的区别是什么?

  • List 是有序集合,可以重复元素

  • Set 集合不能包含重复元素,实现类LinkeHashSet按照插入顺序排序,SortedSet可排序,HashSet无序。

  • Map 存放键值对 (key-value pairs) 映射,映射关系可以是一对一或多对一,key 无序且唯一,value 可重复。实现类中 LinkedHashMap 按照插入顺序排序,SortedMap 可排序,HashMap 无序。

其次,Map 与 List 和 Set 不同,它是双列的集合,值得注意的是并不继承 Collection。

3. ArrayList 和 LinkedList 都不是线程安全的,那有线程安全的 List 类吗?

​ 线程安全 List 类有 Vector 和 CopyOnWriteList。

  • Vector 是通过在其几乎所有方法前加 synchronized 关键字来保证线程安全性;
  • CopyOnWriteList 则是通过数组复制的方法来保证线程安全的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李同学va

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值