Java集合的重点

一、Java集合

Java集合包含一组接口和实现类,底层使用不同类型的数据结构,提供不同特点的存储方式,主要分为两大类:

Collection单列集合和Map键值对集合。

1.Collection接口用于表示单例集合,主要包括三个子接口:List、Set、Queue

•List是有序的、可重复的集合。它维护元素的插入顺序,可以包含重复元素;

主要实现类包括:

  • ArrayList:基于动态数组实现,提供随机访问和插入性能;
  • LinkedList:基于双向链表实现,适合频繁插入和删除操作;
  • Vector:类似ArrayList,基于动态数组实现,使用synchronized实现线程安全,性能略低;
  • Stack:Vector类的子类,提供了FILO先进后出的栈结构;
  • CopyOnWriteArrayList:基于动态数组实现,使用ReentrantLock实现线程安全;

•Set是不允许重复元素的集合;

主要实现类包括:

  • HashSet:基于HashMap实现,元素唯一,无序;
  • LinkedHashSet:HashSet的子类,基于LinkedHashMap实现,元素唯一且有序,同时保持了哈希表的性能;
  • TreeSet:基于TreeMap实现,元素唯一,自动排序或按照自定义规则排序;
  • Queue是用于对元素进行先进先出(FIFO)操作的队列集合;

主要实现包括:

  • LinkedList:基于双向链表实现;
  • LinkedBlockingQueue:线程安全的阻塞队列,适用于多线程环境;

2.Map接口用于表示键值对的集合,Map集合中的key键是唯一的,而value值可以重复。

Map的主要实现类包括:

  • HashMap:基于哈希表实现,提供快速的查找和插入性能;
  • LinkedHashMap:HashMap类的子类,内部多维护了一条双向链表,保存维护了元素的插入顺序;
  • TreeMap:基于红黑树实现,根据key键自动排序或按照自定义规则排序;
  • Hashtable:基于哈希表实现,key和value不允许为null。早期的线程安全实现类,使用synchronized实现线程安全;
  • ConcurrentHashMap:基于哈希表实现,使用synchronized+CAS实现线程安全;

二、List,Set,Map的区别?

  • List:集合中存储的元素是有序的,所以可以进行排序操作。另外,集合中的元素可以可重复;
  • Set:集合中存储的元素不可重复的;
  • Map:集合中的元素使用键值对(Key-Value)存储,Key是无序+不可重复的,Value可重复的;

三、ArrayList与Vector区别?

ArrayList与Vector都是基于动态数组实现的List接口的集合实现类,它们的区别主要包括:

初始容量:

  • ArrayList初始默认容量为0,添加第一个元素时,扩容为10;
  • Vector初始默认容量为10;

扩容方式:

  • ArrayList:在原有容量基础上,扩容0.5倍(新容量是原有容量的1.5倍);
  • Vector:在原有容量基础上,扩容1倍(新容量是原有容量的2倍);

线程安全:

  • ArrayList:线程不安全(可使用CopyOnWriteArrayList集合解决);
  • Vector:线程安全,操作方法使用synchronized(同步锁)实现线程同步;

执行效率:

  • Vector的方法都有同步锁,在方法执行时需要加锁、解锁,所以性能会低于ArrayList;

四、Arraylist与LinkedList区别?

ArrayList与LinkedList都是List接口的集合实现类,它们的区别主要包括:

底层数据结构:

  • Arraylist:底层使用的是Object[]数组;
  • LinkedList:底层使用的是双向链表;

插入和删除元素:

  • ArrayList:插入删除时需要复制数组内的元素,所以性能较差;
  • LinkedList:插入删除时,只影响相邻节点,所以性能较高;

查找和遍历元素:

  • ArrayList:由于是基于数组实现的,支持快速的随机访问。可以通过索引直接访问元素,时间复杂度为O(1)。
  • LinkedList:不支持快速的随机访问。需要从头或尾开始遍历链表,直到找到指定位置的元素,时间复杂度为O(n)

RandomAccess接口:

  • 使用Collections.binarySearch()方法,基于二分查找法,进行元素查找时:
  • ArrayList:实现了RandomAccess接口,使用indexedBinarySearch()(基于下标的二分查找),性能较好;
  •  LinkedList:没有实现RandomAccess接口,使用1teratorBinarySearch()(基于迭代器的二分查找),迭代器会产生额外遍历操作,性能较差;

五、ArrayList的扩容机制?

构造函数初始化时

  • 使用无参数构造方法创建ArrayList时,内部的动态数组被初始化为一个空数组。当向数组中添加第一个元素时,数组容量扩为10;
  • 使用有参数构造方法创建ArrayList时,内部的动态数组按照指定容量进行初始化创建;

添加元素容量不足时

  • 当数组容量不足时,调用grow()方法进行扩容,每次扩容后容量都会变为原来的1.5倍(在原有容量基础上,扩容0.5倍);
  • 扩容后,数组的最大容量不会超过Integer.MAX_VALUE;

六、HashSet、LinkedHashSet和TreeSet区别?

它们都是Set接口的实现类,区别主要包括:

  • HashSet:基于HashMap实现,元素唯一,无序;
  • LinkedHashSet:HashSet的子类,基于LinkedHashMap实现,元素唯一且有序,同时保持了哈希表的性能;
  • TreeSet:基于TreeMap实现,元素唯一,自动排序或按照自定义规则排序;

七、HashSet如何过滤重复元素?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24年支付行业概况与未来

​ 一、行业背景介绍 支付行业作为现代金融体系的基石,正经历着前所未有的变革。随着科技的发展和人们对便捷支付方式的需求不断提高,支付行业在近年来得到了迅猛发展。在我国,支付行业经过多年的发展和市场竞争,已经形成了多元化…

为什么 Vue Router 的 History 模式和 React Router 的 Browser 模式需要服务器支持?

Vue Router 的 history 模式和 React Router 的 Browser 模式使用的是 HTML5 的 History API,它允许你修改浏览器地址栏的 URL 而不发送请求到服务器。这种方式可以创建干净的 URL,没有 # 符号,看起来就像传统的服务器端路由。 然而&#xf…

Navicat 17 新特性 | Navicat BI 功能革新升级,助力企业深度挖掘数据潜能

随着 Navicat 17 的发布,在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性,包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级,原生适配国产平台和操作系统和数据字典提升数据结构清晰度,这些新特性…

【第12章】Spring Cloud之集成 Spring Cloud Gateway

文章目录 前言一、新建项目1. 项目结构2. 引入依赖3. 启动类4. 基本配置 二、新建配置三、新建服务1. 提供者2. 消费者 四、单元测试1. 启动网关服务2. 提供者3. 消费者 总结 前言 Spring Cloud Gateway是一个基于Spring Framework 5、Spring Boot 2和Project Reactor等技术构…

python的csv库常用操作

csv 模块是 Python 标准库中的一个模块,用于处理 CSV(逗号分隔值)文件。它提供了简单易用的功能来读取和写入 CSV 文件。以下是一些常用的操作: 一、读取 CSV 文件 新建文件data.csv,内容如下: 使用 csv.…

浪潮自研交换机系列常见问题处理

CN61108PC-V-H 不能PING通任何地址,也不能被PING 输入ip traceroute enable既可。注意视图 交换机通过console口远程登录至其他交换机,掉线后console口无法使用 例如有2台交换机A和B,在A交换机上插上console线登录后,在A通过SSH…

nodejs安装及环境配置建材商城管理系统App

✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围:Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容:免费功能设计、免费提供开题答辩P…

如何应对Android面试官 -> 常用数据结构如何进行优化

前言 本章我们开始讲解性能优化相关的话题,首先我们来看下数据结构如何优化: 性能优化 性能优化的本质:线上 APM 的性能监控,而性能监控通常是以下技术点 ByteCode、Hook(PLT Hook)、JS注入(采…

tslib 库-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

tslib 库 tslib 简介 tslib 库,这是 Linux 系统下,专门为触摸屏开发的应用层函数库,开源 功能与作用:作为触摸屏驱动和应用层之间的适配层,封装了读取和解析触摸屏数据的复杂过程,提供API接口 数据处理&…

MyBatis 插件机制、分页插件如何实现的

MyBatis 插件机制允许开发者在 SQL 执行的各个阶段(如预处理、执行、结果处理等)中插入自定义逻辑,从而实现对 MyBatis 行为的扩展和增强。以下是 MyBatis 插件运行原理的详细介绍: 插件接口 MyBatis 插件通过实现 org.apache.i…

c++ 高精度加法(只支持正整数)

再给大家带来一篇高精度,不过这次是高精度加法!话不多说,开整! 声明 与之前那篇文章一样,如果看起来费劲可以结合总代码来看 定义 由于加法进位最多进1位,所以我们的结果ans[]的长度定义为两个加数中最…

零基础学SpringBoot(一)--初识SpringBoot

1. SpringBoot简介 SpringBoot 是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot能简化我们之前采用SSM(SpringMVC Spring MyBatis)框架进行开发的过程。 以前我们采用SSM框架进行开发的时候&#xff0c…

vue3前端开发-小兔鲜项目-二级分类页面无限加载的实现

vue3前端开发-小兔鲜项目-二级分类页面无限加载的实现!实际的项目开发中,经常会遇到这需求。产品内容庞大,但是用户不可能一次性全部都加载请求的。当客户向下滚动,触碰到插件的底部时,会再次申请下一页内容。这样就会…

Adobe国际认证详解-动漫制作专业就业方向和前景

动漫制作专业的就业方向和前景随着创意产业的蓬勃发展而愈发广阔。这一专业涵盖了从角色设计、场景绘制到动画制作、特效合成等多个环节,是创意与技术相结合的典型代表。随着数字媒体和互联网的普及,动漫制作专业人才的需求正不断增长,为该专…

2024 杭电多校第一场

目录 目录 树 博弈 传送 树 给一棵根为 1 的有根树,点 i 具有一个权值 Ai 。 定义一个点对的值 f(u,v)max(Au,Av)|Au−Av| 。 你需要对于每个节点 i ,计算 ansi∑u∈subtree(i),v∈subtree(i)f(u,v) ,其中 subtree(i) 表示 i 的子树。 请…

Hadoop中HDFS、Hive 和 HBase三者之间的关系

HDFS(Hadoop Distributed File System)、Hive 和 HBase 是 Hadoop 生态系统中三个重要的组件,它们各自解决了大数据存储和处理的不同层面的问题。我们用大白话来解释这三个组件之间的关系: HDFS - 数据的仓库: HDFS 是…

Vscode离线下载对应版本的ms-python.vsix

一、查看vscode的版本号和发行时间 vscode界面中Help-About查看版本号和发行时间,ms-python的发行时间需要和这个时间相近: 二、在github仓库中查看ms-python有什么版本,以及发行时间 github仓库路径 https://github.com/microsoft/vsco…

虚幻引擎,体积雾、体积光、镜头泛光

1、体积雾 这里介绍的是用于地面的体积雾效果,效果如图1-1: 图1-1 首先,需要场景中存在指数级高度雾并开启体积雾(如图1-2)。然后创建材质,材质域选择“体积”,混合模式选择“Additive”。材质节…

shell脚本中for循环和while循环

目录 for循环 while 循环 前面说完了if判断语句,现在该来学习shell脚本中的另一个重点内容了,那就是循环语句。循环语句分为 for 循环和 while 循环,二者本质上来说是没有太大区别,但针对不同的情况,使用不同的语句可…

【Git-常用命令】一文搞懂学会git的常用命令以及使用技巧

【Git-常用命令】一文搞懂学会git的常用命令以及使用技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注&…