首页 > 其他分享 >集合相关面试题

集合相关面试题

时间:2024-09-11 08:53:08浏览次数:13  
标签:Map 面试题 Set ArrayList 元素 Collection 接口 集合 相关

List、Set、Map 是否继承自Collection 接口?

  1. List 是一个接口,它继承自 Collection 接口。List 接口定义了一个有序的集合,可以包含重复的元素。
  2. Set 也是一个接口,它继承自 Collection 接口。Set 接口定义了一个不允许重复元素的集合。
  3. Map 则不同,它不是一个继承自 Collection 接口的接口。Map 提供了键值对的存储,它继承自 Map 接口本身,而不是 CollectionMap 接口不继承自 Collection,因为它的行为和 Collection 接口所定义的行为不同。Map 接口中的集合视图(键集视图、值集视图和条目集视图)实现了 Collection 接口。

所以,总结来说,ListSet 继承自 Collection 接口,而 Map 则不继承自 Collection 接口。

阐述ArrayList、Vector、LinkedList 的存储性能和特性?

  1. ArrayList
    • 底层结构ArrayList 基于动态数组实现,可以看作是可以动态增长和缩小的数组。
    • 插入和删除性能:在列表的末尾添加元素(或在任何位置插入元素,但不包括列表的开头)时,性能较好,因为只需要移动插入点后面的元素。但如果在列表的开头或中间插入或删除元素,可能需要移动大量元素,这会导致性能下降,时间复杂度为 O(n)。
    • 内存占用ArrayList 通常占用的内存比 LinkedList 少,因为它不需要为每个元素存储额外的指针。
    • 线程安全ArrayList 是非线程安全的。
  2. Vector
    • 底层结构Vector 也是基于动态数组实现的,与 ArrayList 类似,但它是同步的。
    • 随机访问性能:和 ArrayList 一样,Vector 在随机访问时性能也很好,时间复杂度为 O(1)。
    • 插入和删除性能:与 ArrayList 类似,Vector 在列表末尾添加元素时性能较好,但在列表开头或中间插入或删除元素时性能较差,时间复杂度为 O(n)。
    • 内存占用Vector 通常比 ArrayList 占用更多的内存,因为它是同步的,需要额外的内存来支持线程安全。
    • 线程安全Vector 是线程安全的,因为它的所有公共方法都是同步的,这在多线程环境中很有用,但也意味着在单线程环境中可能会有性能损失。
  3. LinkedList
    • 底层结构LinkedList 是基于双向链表实现的。
    • 随机访问性能:由于是基于链表实现的,LinkedList 在随机访问时性能较差,时间复杂度为 O(n),因为它需要从头开始遍历链表直到找到目标元素。
    • 插入和删除性能LinkedList 在列表的任何位置插入或删除元素时性能都很好,时间复杂度为 O(1),因为只需要更改几个节点的指针即可。
    • 内存占用LinkedList 通常比 ArrayList 占用更多的内存,因为每个元素都需要存储额外的指针(指向前一个和后一个元素的指针)。
    • 线程安全LinkedList 是非线程安全的。

在选择这三种列表实现时,需要根据具体的应用场景来决定。如果需要频繁的随机访问,ArrayList 可能是更好的选择。如果需要频繁的插入和删除操作,尤其是在列表的开头或中间,LinkedList 可能更合适。而如果需要线程安全的集合,可以考虑使用 Vector 或者 Collections.synchronizedList 方法包装 ArrayList

Collection 和Collections 的区别?

  1. Collection
    • Collection 是一个接口,它是Java集合框架中最基本的接口之一。
    • 它定义了一组方法,这些方法可以对集合进行操作,如添加、删除、遍历等。
    • Collection 接口是其他具体集合接口的父接口,如 ListSet
    • Collection 接口本身不提供任何实现,它只是定义了一组操作集合的标准方法。
  2. Collections
    • Collections 是一个包含静态方法的工具类,它提供了一系列操作或返回各种类型的不可变或可变集合的实用方法。
    • 它包含了一些有用的静态方法,如排序(sort)、搜索(binarySearch)、反转(reverse)、填充(fill)等。
    • Collections 类还提供了一些工厂方法来创建不可修改的集合、同步集合等。
    • Collections 类中的所有方法都是静态的,因此你可以直接通过类名调用它们,而不需要创建 Collections 类的实例。

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

  1. List
    • 存元素:在 List 中,元素是按照它们被插入的顺序存储的。你可以使用 add(index, element) 方法在特定位置插入元素,或者使用 add(element) 在列表末尾添加元素。
    • 取元素:可以通过索引直接访问元素,例如 get(index) 方法。也可以使用迭代器或增强的for循环遍历 List
    • 特点:允许元素重复,可以有多个相同的元素。
  2. Map
    • 存元素:在 Map 中,元素是以键值对的形式存储的。使用 put(key, value) 方法将键和值存入 Map。如果键已经存在,则其对应的值会被更新。
    • 取元素:可以通过键来获取对应的值,使用 get(key) 方法。也可以通过键集视图、值集视图或条目集视图来遍历 Map
    • 特点:不允许键重复,每个键最多只能映射到一个值。值可以重复。
  3. Set
    • 存元素:在 Set 中,元素是唯一的,不允许有重复的元素。使用 add(element) 方法添加元素。如果集合中已经存在该元素,则添加操作不会改变集合。
    • 取元素:通常使用迭代器或增强的for循环来遍历 Set,因为 Set 通常不保证元素的顺序。
    • 特点:不允许元素重复,每个元素都是唯一的。

标签:Map,面试题,Set,ArrayList,元素,Collection,接口,集合,相关
From: https://www.cnblogs.com/ZWJ7671277/p/18407609

相关文章

  • sql相关
    基础语句:模糊匹配:%任意字符,_占位符like'_t%';多字段排序:selectwinner,yr,subjectfromnobelwherewinnerlike'Sir%'orderbyyrdesc,winnerasc按照特殊排序,把chemistry,physics排在后面selectwinner,subjectfromnobelwhereyr=1984orderbysubjectin......
  • 高级java每日一道面试题-2024年9月06日-基础篇-Java中的PO、VO、BO、DO、DAO、DTO、PO
    如果有遗漏,评论区告诉我进行补充面试官:Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?我回答:PO持久化对象(PersistentObject)PO是持久化对象,用于表示数据库中的实体或表的映射通常与数据库表的结构和字段对应PO的属性对应数据库表的字段,可以进行持久化操作(新......
  • Java集合——Queue详解
    Queue详解基本概念功能分类主要方法普通队列双端队列阻塞队列使用示例总结基本概念Java中的Queue接口表示一种先进先出(FIFO,FirstInFirstOut)的数据结构,但实际上它也支持其他插入和删除策略。Queue是Java集合框架的一部分,它继承自Collection接口,并且定义......
  • java----双列集合(Map)
    来看一下双列集合。我们知道,单列集合就是一次只能添加一个元素:单列集合: 双列集合一次可以存储两个值:一、双列集合特点:    1.双列集合一次需要存一对数据,分别为键和值    2.键不能重复,值可以重复    3.键和值是一一对应的,每个键只能找到......
  • Python数据结构集合的相关介绍
    集合是一种无序、可变的数据结构,它也是一种变量类型,集合用于存储唯一的元素。集合中的元素不能重复,并且没有固定的顺序。在Python提供了内置的 set 类型来表示集合,所以关键字set就是集合的意思。你可以使用大括号 {} 或者 set() 函数来创建一个集合。my_set={1,2,......
  • 写给编程相关专业
    写给编程相关专业计算机网络空间安全学院计算机科学与技术简称计科,即ComputerScience主要学习偏向底层基础。举例:学习的好的,可以去为某些硬件写驱动。可以做图像的识别之类的。为什么比较基础?因为(个人看法)这些图像,硬件,为他们写代码,接触的是像素,0/1(纯胡扯)......
  • 一、记录最近网安面试题
    前言大家好,我是一名大四学生,最近正在找实习,我整理一些面试遇到的问题。以下的解答是我经过网络整理得出的,如果有不对或者缺少的地方欢迎大家指出。一、CDN绕过的方法方法1:查询历史DNS记录1)查看IP与域名绑定的历史记录,可能会存在使用CDN前的记录,相关查询网站有:https://......
  • 数据结构实验报告1(集合)
    学习目标:        掌握抽象数据类型的表示与实现方法。学习内容:        描述一个集合的抽象数据类型ASet,其中所有元素为整数且所有元素不相同,集合的基本操作包括:由整数数组a[0..n-1]创建一个集合。输出集合中的所有元素。判断一个元素是否在一个集合中。求......
  • selenium相关配置
    #创建一个配置对象options=webdriver.ChromeOptions()#代理设置options.add_argument('--proxy-server=http://221.131.165.71:27208')#携带本地用户信息启动,注意:在使用的时候要将运行的谷歌浏览器全部关闭#--user-data-dir携带的谷歌的本地信息,默认路径option......
  • Spring cloud alibaba面试题
    Springcloudalibaba面试题Nacos1.x作为注册中心的原理?底层基于netty实现。集群数据同步使用distrio协议。Nacos服务领域模型有哪些?模型名称解释Namespace实现环境隔离,默认值public,比方说DEV、SIT、UAT环境。Group一般用来表示某个项目。不同的service可以组......