Java常用数据结构与集合

数据结构

数组:

  • 内存地址连续
  • 检索效率高(可以通过下标访问成员)
  • 增删操作效率低(保证数据越界的问题,需动态扩容)
  • 长度固定,扩容的需要新的数组复制或者Arrays类的copyOf方法

链表

  • 内存地址不连续
  • 查询快删除慢,因为需要移动指针
  • 又分双向链表和单向链表,单向链表有下一个元素的指针,双向有指向上一个,下一个两个指针

双向链表的结构

    static final class Node {
       // 前一个节点
        volatile Node prev;
        // 后一个节点
        volatile Node next;
		// 链表节点存储的具体数据
        volatile Thread thread;
    }

队列

  • 尾插头删
  • 管状结构,先进先出

  • 尾插尾删
  • 杯状结构,先进后出

集合框架

HashMap

  • 底层是数组+链表的结构,hash值相同的会形成链表,jdk1.8之后当相同hash值超过8个之后会变为红黑树
  • 并不是线程安全的,如果想要一个安全的collections.synchronizedMap返回一个线程安全的。或者使用concurrentHashMap
  • 允许一个key为null,多个value为null

HashTable

  • 是一个古老的Map实现类,它不允许使用null作为键和值。Hashtable的性能略低于HashMap,多线程安全。

LinkedHashMap

  • 底层是数组+链表+双向链表,根据添加顺序排序;线程不安全。
  • 数组和链表的作用和HashMap的作用一样,双向链表是来记录键值对的插入顺序或访问顺序

TreeMap

  • 底层是红黑树,默认是根据键值字典排序就是无序,也可以自己排序。compareable接口或者Comparator
  • 线程安全。

ConcurrentHashMap

  • ConcurrentHashMap底层采用分段的数组+链表实现,线程安全。通过分段锁的方式保证线程安全,默认性能提高16倍。超过75%时扩容,仅扩容当前分段数组
  • 1.7的实现是使用Segment数组,每个Segment就是一个分段锁,对应了一个HashEntry数组。每个HashEntry对应着一个node数组。get()时需要计算两次Hash,第一次拿到Segment,第二次拿到对应的hashEntry。1.8后只需要一次了。1.8之后去掉了Sement分段锁,直接以HashEntry为锁,这样减少了锁的粒度,也减少了冲突的概率。除了去掉Segment外,把node数组更换为红黑树,空间复杂度也从O(n)变为O(logn)
     

HashSet

  • 不重复且无序,允许有一个null
  • 因为源自hashmap所以hash冲突时解决方法一样

LinkedHashSet

  • 不重复且有序
  • 添加的双向链表定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代

TreeSet

  • 底层是红黑树,默认是根据键值字典排序就是无序,也可以自己排序。compareable接口或者Comparator
  • 查询和删除都很快
  • 线程不安全

ArrayList

  • 存取有序、可重复
  • 添加第一个元素时,底层会创建一个新的长度为10的数组。扩容1.5倍
  • 大量数据的查询、 少量数据的增删

LinkedList

  • 双链表 、查询慢、增删快
  • 线程不安全


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MoS2】应变增强的单层MoS2光电探测器

这篇文章的标题是《Strain-Enhanced Large-Area Monolayer MoS2 Photodetectors》,作者是Borna Radatovic等人,发表在《ACS Applied Materials & Interfaces》期刊的2024年第16卷。文章主要研究了应变增强的大面积单层MoS2光电探测器的性能和应用潜力…

车内AR互动娱乐解决方案,打造沉浸式智能座舱体验

美摄科技凭借其卓越的创新能力,为企业带来了革命性的车内AR互动娱乐解决方案。该方案凭借自研的AI检测和渲染引擎,打造出逼真的数字形象,不仅丰富了车机娱乐内容,更提升了乘客与车辆的互动体验,让每一次出行都成为一场…

2024 年适用于 Mac 电脑的最佳 SD 卡恢复软件

D 卡体积很小,广泛用于数码相机、摄像机、行车记录仪、无人机等。通常,在使用设备拍照、拍摄视频后,您会将文件移动到 Mac 进行进一步编辑或作为备份。大多数时候,应该存在问题。但是,您的 SD 卡仍然会出现一些问题并导…

揭秘分享京东商品详情数据接口(商品属性,sku,价格)API接口可测试

今天给大家分享关于封装根据京东商品ID或商品链接批量获取京东商品详情数据接口方法,支持高并发请求。 如果你对京东的商品详情数据感兴趣,我建议你采取以下合法和合规的途径: 使用京东开放平台:京东开放平台提供了一系列的API接…

Harmony鸿蒙南向驱动开发-RTC接口使用

功能简介 RTC(real-time clock)为操作系统中的实时时钟设备,为操作系统提供精准的实时时间和定时报警功能。当设备下电后,通过外置电池供电,RTC继续记录操作系统时间;设备上电后,RTC提供实时时…

微信小程序中调取小程序实现报错:提示 开发版小程序已过期,请在开发者工具中重新扫码的 解决方案

出现的问题: 解决方法: 将envVersion: develop,开发版切换为正式版 envVersion: release,wx.navigateToMiniProgram({appId:res.data.appId,path: res.data.prePayTn,extraData: {foo: bar,miniProgramOrgId:res.data.miniProgramOrgId,orderId: res.d…

云原生(八)、Kubernetes基础(一)

K8S 基础 # 获取登录令牌 kubectl create token admin --namespace kubernetes-dashboard1、 NameSpace Kubernetes 启动时会创建四个初始名字空间 default:Kubernetes 包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新集群。 kube-node-lease: 该…

【SpringBoot XSS存储漏洞 拦截器】Java纯后端对于前台输入值的拦截校验实现 一个类加一个注解结束

先看效果: 1.js注入拦截: 2.sql注入拦截 生效只需要两步: 1.创建Filter类,粘贴如下代码: package cn.你的包命.filter; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IO…

C++项目——集群聊天服务器项目(十四)客户端业务

大家好~前段时间有些事情需要处理,没来得及更新,实在不好意思。 今天来继续更新集群聊天服务器项目的客户端功能,主要实现客户端业务,包括添加好友、点对点聊天、创建群组、添加群组、群组聊天业务,接下来我们一起来敲…

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面: 选择合适的字体:在Unity中,确保使用支持泰文字符的字体是至关重要的。例如,可以选择使用Noto Serif Thai字体,这是一个支持泰语的字体2。 处理Unity版本问题:某些…

物联网实战--驱动篇之(八)磁编码器(AS5600)

目录 一、AS5600磁编码简介 二、AS5600使用 一、AS5600磁编码简介 AS5600是一款性价比极高的磁编码传感器,一般用于电机转动位置的记录,一般采用IIC通讯,也可以用模拟信号获取转动角度,具体资料在这里。AS5600-ASOM_&#xff08…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源,都写的乱七八糟的,都是随便换,最后还是换得一堆问题。 镜像源也是跟版本一一对应的,不能随便一个国内源就还过去用,否则会出现各种各样的问题,我也是吃过亏之后才发现的。 国…

Harmony鸿蒙南向驱动开发-SPI接口使用

功能简介 SPI指串行外设接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线。SPI是由Motorola公司开发,用于在主设备和从设备之间进行通信。 SPI接口定义了操作SPI设备的通用方法集合…

MacOS13搭建安卓逆向环境

MacOS中用apktool解包 这里是所有链接:123云盘下载 https://www.123pan.com/s/9QRqVv-JE7Y.html安装apktool https://apktool.org/docs/install/ 或者下载单独的jar包 brew install wgethttps://apktool.org/blog/apktool-2.9.3下载直链:https://co…

【Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现】

文章目录 前言 一、漏洞名称 二、漏洞描述 三、受影响端口 四、受影响版本 五、漏洞验证 六、修复建议 前言 近日在做漏扫时发现提示服务器存在CVE-2020-1938漏洞,故文章记录一下相关内容。 一、漏洞名称 Tomcat 文件读取/文件包含漏洞(CVE-2020-1938) 二、漏洞描…

大数据之ClickHouse

大数据之ClickHouse 简介 ClickHouse是一种列式数据库管理系统,专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统,最初由俄罗斯搜索引擎公司Yandex开发,用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库…

苹果全力升级:用专注AI的M4芯片彻底改造Mac系列

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

FPGA基于VCU的H265视频解压缩,解码后HDMI2.0输出,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案4K60帧HDMI2.0输入,H265视频压缩方案 3、详细设计方案设计框图FPGA开发板解压视频源Zynq UltraScale VCUVideo Frame Buffer ReadVideo MixerHDMI 1.4/2.0 Transmitter SubsystemVideo PHY Cont…

微服务学习 Eureka注册中心

服务调用时候出现问题,当服务者很多时候,比如不同的端口。消费者如何找到服务者的地址?又如何判断服务者是否健康。 Eureka基本原理: 总结:如果有多个服务提供者,消费者该如何选择? 搭建Eureka注册中心: 1.…

oracle创建整个数据库的只读账户

在源用户readonly 下创建只读用户 reader readonly 的表空间为AA 一、创建只读用户 create user reader identified by 密码 default tablespace AA; 二、授权 grant connect to reader ; 三、获取原账号readonly 的查询权限 select grant select on ||owner||.||object…