当前位置: 首页 > news >正文

【Java-一些常见单列集合面试问题】

目录

1.List,Set的区别?

2.ArrayList与Vector区别? 

3.Arraylist与LinkedList区别?

4.ArrayList的扩容机制?

5.HashSet、LinkedHashSet和TreeSet 区别?

6.HashSet如何过滤重复元素?


1.List,Set的区别?

List:集合中存储的元素是有序的,元素可以重复,可以进行排序操作。
Set:集合中存储的元素不可重复的

2.ArrayList与Vector区别? 

 ArrayList 与Vector 都是基于动态数组实现的 List 接口的集合实现类,它们的区别主要包括:
1.初始容量:
        ArrayList初始默认容量为0,添加第一个元素时,扩容为10
        Vector 初始默认容量为:10
2.扩容方式:
        ArrayList:在原有容量基础上,扩容0.5倍(新容量是原有容量的1.5倍);
        Vector:在原有容量基础上,扩容1倍(新容量是原有容量的2倍);
3.线程安全
        ArrayList:线程不安全(可使用 CopyOniriteArrayList 集合解决);
        Vector:线程安全,操作方法使用 synchronized(同步锁)实现线程同步:
4.执行效率:
        Vector的方法都有同步锁,在方法执行时需要加锁、解锁,所以性能会低于 ArrayList;

3.Arraylist与LinkedList区别?

ArrayList 与LinkedList都是 List 接口的集合实现类,它们的区别主要包括:
1.底层数据结构:
        Arraylist:底层使用的Object[]数组:
        LinkedList :底层使用的是双向链表
2.插入和删除元素:
        ArrayList:插入删除时需要复制数组内的元素,所以性能较差:查找和遍历元素:
        LinkedList:插入删除时,只影响相邻节点,所以性能较高:
        ArrayList:插入删除时需要复制数组内的元素,所以性能较差:
        LinkedList:插入删除时,只影响相邻节点,所以性能较高;
3.RandomAccess 接口:
        使用Collections.binarySearch()方法,基于二分查找法,进行元素查找时: 

        Arraylist:实现了 RandonAccess 接口,使用 indexedBinarySearch()(基于下标的二分查找),性能较好;
        LinkedList :没有实现 RandonAccess 接口,使用 iteratorBinarySearch()(基于迭代器的二分查找),迭代器会产生额外遍历操作,性能较差:

4.ArrayList的扩容机制?

1.构造函数初始化时
        使用无参数构造方法创建 Arraylist 时,内部的动态数组被初始化为一个空数组。当向数组中添加第一个元素时,数组容量扩为 10;
        使用有参数构造方法创建 ArrayList 时,内部的动态数组按照指定容量进行初始化创建
2.添加元素容量不足时
        当数组容量不足时,调用grow()方法进行扩容,每次扩容后容量都会变为原来的1.5倍(在原有容量基础上,扩容0.5倍);
        扩容后,数组的最大容量不会超过 Integer.MAX_VALUE; 

5.HashSet、LinkedHashSet和TreeSet 区别?

 它们都是Set接口的实现类,区别主要包括:
        HashSet:基于 HashMap实现,元素唯一,无序:
        LinkedlashSet:HashSet 的子类,基于LinkedHashMap实现,元素唯一且有序,同时保持了哈希衷的性能;
        Tree5et :基于 TreeMap实现,元素唯一,自动排序或按照自定文规赔排序;

6.HashSet如何过滤重复元素?

        HashSet 内部使用一个HashMap 作为数据结构,保存元素时,会使用这个HashMap 的key 来进行保存。key 是唯一的,所以重复元素会自动过滤。

http://www.lryc.cn/news/417946.html

相关文章:

  • 搭建个人博客需要做哪些事
  • 《向量数据库指南》——非结构化数据的行业需求及向量数据库的关键角色
  • C++:map容器的使用
  • C++初学(10)
  • 在MAC安装Lazarus 起点 - 我们的第一个Lazarus程序!
  • 【每日刷题】Day96
  • EGO-Swarm 仿真环境搭建
  • 【EI会议征稿通知】第九届计算机技术与机械电气工程国际学术论坛(ISCME 2024)
  • 【starRocks-docker 部署问题汇总】
  • threejs中,如何检测一个模型周边一定范围内的其它模型
  • UDP端口可达性检测(端口扫描)工具开发
  • 第三届计算、通信、感知与量子技术国际会议(CCPQT 2024)会议通知
  • Qt文件读写
  • 发现了一套超厉害的英语资料,绝对YYDS
  • C# new关键字作用
  • Python代码之特征工程基础
  • 低代码平台:效率利器还是质量妥协?
  • 大数据-Big Data
  • Redis的持久化的策略
  • 【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装
  • 【C/C++笔记】:易错难点3 (二叉树)
  • 一篇文章解决Webpack
  • 速盾:cdn如何解析php文件中的图片?
  • 如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330
  • 什么是实时数据仓库?它有哪些不可替代之处?
  • 《Ubuntu22.04环境下的ROS2学习笔记1》
  • Jupyter nbextensions安装与使用
  • java.nio.charset.MalformedInputException: Input length = 1
  • yarn的安装和配置使用
  • JVM知识总结(即时编译)