首页 > 其他分享 >集合常见面试题

集合常见面试题

时间:2024-09-05 11:26:33浏览次数:10  
标签:面试题 常见 ArrayList 元素 接口 Set 存放 集合 线程

一.List,Set,Map集合是否都继承自Collection接口

1.List,Set和Map的基本概念

  • List:一个有序集合(也称序列)。List中的元素是有序的,且可以重复。List接口的常用实现类由ArrayList,LinkedList等。
  • Set:一个不包含重复元素的集合。Set中的元素是无序的(虽然某些Set实现可能会维护元素的某种顺序,但这并不是Set接口的契约)。Set接口的常用实现类由HashSet,TreeSet。
  • Map:一个键值对映射。Map中的每一个元素都是一个键值对(Key-value),键(key)是唯一的,而值(value)可以是重复的。Map接口的常用实现类有HashMap,TreeMap。

2.List和Set

  • List和Set都是Collection接口的子接口。
  • 这意味着实现了List或Set接口的类都自动实现了Collection接口中定义的方法,如add(),remove(),contains(),size()等。

3.Map

  • Map接口并不继承自Collection接口。
  • Map表示一个键值对映射,而不是一个元素集合。因此,他又自己的方法来操作键值对,如put(),get(),remove()等。

二.阐述ArrayList,Vector,LinkedList的存储性能和特性

1.ArrayList

  • 存储性能:ArrayList基于动态数组实现,这意味着它在内存中分配一个数组来存储元素。当数组的容量不足以容纳更多元素时,ArrayList会创建一个更大的数组,并将旧数组中的所有元素复制到新数组中。
  • 添加和删除:在列表的末尾添加元素或访问元素时,ArrayList通常提供很好的性能。但是,如果在列表的中间或开始添加或删除元素,性能会下降,因为这需要移动插入点之后的所有元素。
  • 随机访问:ArrayList支持快速随机访问,即通过索引直接访问元素,这使得get和set操作非常快。
  • 线程安全:ArrayList不是线程安全的。

2.Vector

  • 存储性能:Vector也是基于动态数组实现的,与ArrayList相似,但它是同步的,即它的所有公共方法都是线程安全的。
  • 添加和删除:由于同步机制,Vector在添加或删除元素时可能会比ArrayList慢,因为每次都需要获取锁。
  • 随机访问:与ArrayList一样,Vector也支持快速访问
  • 线程安全:Vector是线程安全的,这种安全性是以牺牲性能换取的。

3.LinkedList

  • 存储性能:LinkedList是基于双向链表实现的,每个元素都包含对前一个和后一个元素的引用。
  • 添加和删除:LinkedList在列表的任何位置添加或删除元素都非常高效,因为它只需要改变几个节点的引用。但是,由于需要遍历链表来找到插入点,所以添加和删除元素的性能可能会受到列表大小的影响。
  • 随机访问:LinkedList不支持快速随机访问,因为要访问特定索引的元素,可能需要从头到尾遍历链表,这使得get和set操作比ArrayList慢。
  • 线程安全:LinkedList不是线程安全的。

4.总结:

  • 如果你需要频繁的随机访问元素,并且不关心线程安全,那么ArrayList是一个好的选择。
  • 如果你需要线程安全的集合,并且可以接受性能上的折中,那么可以选择Vector。
  • 如果你需要频繁的在列表中插入或删除元素,尤其是在列表的开始或中间位置,那么LinkedList是一个好的选择。

三.Collection和Collections的区别

1.Collection:

  • Collection是一个接口,他是Java集合框架中最基本的接口之一。
  • 它定义了一组方法,这些方法可以对集合进行操作,如添加,删除,遍历等。
  • Collection接口是List,Set和Queue等其他集合接口的父接口。
  • 他提供了一些通用的方法,如add(),remove(),contains(),size(),isEmpty(),iterator()等。

2.Collections:

  • Collections是一个包含静态方法的工具类,它提供了一系列操作或返回各种类型的Collections实例的方法。
  • 它位于java.util包中,用于操作或返回集合实例,而不是定义集合的结构。
  • Collections类中包括的方法:
    • 排序方法:如sort(),reverseOrder()等
    • 搜索和修改方法:binarySearch(),max(),min()等
    • 同步包装器:synchronizedList(),synchronizedSet(),用于提供线程安全的集合试图
    • 空集合:如emptyList(),emptySet()等,返回不可变的空集合

3.区别:

  • Collection是一个接口,定义了集合的行为和操作。
  • Collections是一个工具类,提供了一系列静态方法来操作或返回集合。

四.List,Set,Map三个接口存取元素时,各有什么特点?

1.存放时:

List存放元素可以重复,存放元素是有序的(按插入顺序)

  • ArrayList,Vector(线程安全),根据特定的索引来存放元素。
  • linkedList:队列的实现,元素总是存放于尾部。
  • 方法:add(E e) :将指定的元素添加到此列表的尾部。add(int index, E element) :将指定的元素插入此列表中的指定位置。offer(E e) :将指定元素添加到此列表的末尾(最后一个元素)等。

Set存放元素不可重复

  • HashSet存放元素时无序的,根据元素hashcode存放元素;
  • LinkedHashSet存放元素是有序的,根据元素hashcode存放元素,但在HashSet的基础上同时使用链表,保证插入顺序。
  • TreeSet存放元素是有序的,根据指定数据内容存放,利用红黑树进行排序。

Map键值对,键不可重复,值可重复

  • HashMap,HashMap(线程安全)存放元素无序,根据键的hashcode存放键值对;
  • LinkedHashMap存放键值对有序,根据键的hashcode存放键值对,但在HashMap的基础上同时使用链表,保证插入顺序。
  • TreeMap存放键值对是有序的,根据键的指定内容存放,利用红黑树进行排序。

2.取出时:

List取出元素

(1)get(index)、poll()、peek()等方法;
(2)for循环;
(3)foreach循环;
(4)Iterator迭代器迭代。

Set取出元素

(1)foreach循环;
(2)Iterator迭代器迭代。

Map取出元素

(1)get(key)方法;
(2)entrySet()获得Set<Map.Entry<K,V>>,然后进行Set集合迭代;
(3)keySet()获得Set,然后结合get(key)方法,进行Set集合迭代;
(4).foreach(new BiConsumer(){}),进行迭代。

标签:面试题,常见,ArrayList,元素,接口,Set,存放,集合,线程
From: https://www.cnblogs.com/chenlei210162701002/p/18398015

相关文章

  • 已成功入职小米大模型算法岗!大模型面试其实挺水的,hr听到这些直接过【附面试题PDF】
    大模型面试其实挺水的,hr听到这些直接过这份《小米大模型算法岗面试题+答案详解》已经上传CSDN,还有完整版的大模型AI学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】PDF书籍:完整版本链接获取......
  • 在 SQLAlchemy 中对数据异步处理的时候,获得关联集合的处理方式
    我们在定义SQLAlchemy对象模型的关系的时候,用到了relationship来标识关系,其中lazy的参数有多种不同的加载策略,本篇随笔介绍它们之间的关系,以及在异步处理中的一些代码案例。1、在SQLAlchemy中定义关系在SQLAlchemy中,relationship()函数用于定义表之间的关系(如one-to-ma......
  • DevExpress WPF中文教程:如何解决排序、过滤遇到的常见问题?(一)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 深度学习资料集合
    社区推荐AIQ是一个专注于人工智能和机器学习的交流平台,旨在推动行业内的知识分享与技术交流。专知是一个聚焦于前沿科技和多领域知识的平台,提供丰富的文章和讨论,使用户能够深入理解机器学习及其应用。DataTauDataTau是一个数据科学和机器学习爱好者的社区,用户可以在这......
  • 搜狐2024年最新Java开发面试题及参考答案
    Redis的分布式锁Redis的分布式锁是一种在分布式环境下实现互斥访问共享资源的机制。在分布式系统中,多个进程或线程可能同时尝试访问同一资源,为了确保资源的一致性和安全性,需要使用分布式锁来进行协调。Redis实现分布式锁通常使用SETNX命令,该命令在指定的key不存在......
  • NOIP2024集训Day23 DP常见模型3 - 树形
    NOIP2024集训Day23DP常见模型3-树形A.[CSP-S2021]括号序列区间dp,令\(f_{l,r}\)表示从位置\(l\)到位置\(r\)一共的合法序列总情况数量。一共有六种不同的转移情况,所以将\(f_{l,r}\)扩充到三维。全是*(...)(...)**(...)***,左边以括号序列开头,右边以*结尾......
  • 不信你没返工过,这些PCB常见问题为什么就是逃不过?
    在后台曾有工程师朋友留言过他们在PCB设计中所碰到的一些问题,一不注意就会出现废板返工现象,成本升高。那么,今天就与品质大佬一起对一些常见问题进行解答,大家能够提前避免这些问题所带来的麻烦!Q:最小孔径0.15mmA:在机械加工中孔径过小会影响生产良率与时效建议:机械通孔孔径......
  • JAVA面试题
    1|0必收藏的Java面试题2|0目录Java面试题一.容器部分二.多线程部分三.SpringMvc部分四.Mybatis部分五.MySQL部分六.Redis部分七.RabbitMQ部分八.JVM虚拟机部分九.算法知识部分十.其他面试部分2|1更新时间:2020/08/10内容:JVM虚拟机部分预更:算......
  • idea2021安装教程与常见配置(可激活至2099年)
    idea2021安装教程与常见配置(可激活至2099年)下载官网下载地址:https://www.jetbrains.com/zh-cn/idea/download/other.html这里我们选择压缩包安装方式,选择2021.3-Windowsx64ZIPArchive(zip),也可以选择exe安装方式安装解压缩安装方式创建非中文目录D:\idea2......
  • css常见布局
    两列布局1、flex2、float3、position:absolute三列布局1、flex2、float(圣杯布局,双飞翼布局)3、position:absolute圣杯布局1、注意html结构是main->left->right把重要的内容放在前面,有利于seo2、父级padding3、三个元素都是float<divclass="container"> <div......