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

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


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

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

相关文章

区块链安全-----区块链基础

区块链是一种全新的信息网络架构 ,是新一代信息基础设施 ,是新型的价值交换方式、 分布式协 同生产机制以及新型的算法经济模式的基础。 区块链技术可以集成到多个领域。 区块链的主要用途 是作为加密货币的分布式总帐。 它在银行 ,金融 &…

数据仓库—数据仓库的特征

数据仓库的兴起正是源于企业日益增长的商业智能和决策分析需求。企业期望能够全面获取内外部的数据资源,洞见历史运营趋势,预测未来发展态势,从而制定前瞻性的经营策略。然而,分散的OLTP系统由于数据孤岛、格式不一致等问题,无法很好地满足这一需求。 因此,建立一个集成的、面…

Java同步机制synchronized:理解wait和notify的运用

引言: 在Java多线程编程中,线程间的同步是确保共享资源被正确访问的关键。线程的协调,如何等待和通知是解决线程同步问题的核心。 synchronized的作用与机制: synchronized是Java中的一个关键字,用于在多线程的环境下…

浏览器工作原理与实践--HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络

前面两篇文章我们分析了HTTP/1和HTTP/2,在HTTP/2出现之前,开发者需要采取很多变通的方式来解决HTTP/1所存在的问题,不过HTTP/2在2018年就开始得到了大规模的应用,HTTP/1中存在的一大堆缺陷都得到了解决。 HTTP/2的一个核心特性是使…

MFC:手写一个模态对话框程序

我们知道,在MFC中,要生成一个模态对话框程序,只要按着VS的提示,拖拖拽拽就能生成一个这样的程序,效率非常高。这里,我们反其道而行之,自己写一个这样的程序,这个程序与自动生成的程序…

生活是否磨灭斗志:一场深度探讨

在人生的舞台上,每个人都在演绎着自己的故事,其中充满了挑战、挫折、成功与喜悦。在这个过程中,一种名为“斗志”的精神力量始终贯穿其中,驱动我们面对困难,追求目标,实现自我价值。然而,有一种…

机器学习基础入门(一)(机器学习定义及分类)

机器学习定义 给予计算机无需特意带有目的性编程便有学习能力的算法 深度学习算法 主要有监督学习和非监督学习两类 监督学习(supervised learning) 定义 1、学习由x映射到y的映射关系 2、主动给予机器学习算法正确示例,算法通过示例来学习…

订单中台架构:打造高效订单管理系统的关键

在现代商业环境下,订单管理对于企业来说是至关重要的一环。然而,随着业务规模的扩大和多渠道销售的普及,传统的订单管理方式往往面临着诸多挑战,如订单流程复杂、信息孤岛、数据不一致等问题。为了应对这些挑战并抓住订单管理的机…

大数据迁移工具开发思路

数据存储MySQL中,迁移到hive中,建立数据仓库,为后期的大数据分析、主题订阅、消息分发提供海量数据支持。 涉及到的服务及中间件版本如下: 1、MySQL,版本:8.0.19 2、Hive,版本:3.0.0…

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群(控制端) 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

java包目录命名

包目录命名 config controller exception model common entity enums reponse request repository security service util

Python 全栈系列239 使用消息队列完成分布式任务

说明 在Python - 深度学习系列32 - glm2接口部署实践提到,通过部署本地化大模型来完成特定的任务。 由于大模型的部署依赖显卡,且常规量级的任务需要大量的worker支持,从成本考虑,租用算力机是比较经济的。由于任务是属于超高计…

Java上机实验报告(6)

实验 (6) 项目名称:常用实用类-字符串类 一、 实验报告内容一般包括以下几个内容: 实验项目名称 实验6 常用实用类-字符串类实验目的和要求 本实验的目的: 掌握字符串概念,区分字符串类型和字符类型。掌握…

QA测试开发工程师面试题满分问答11: web前端页面视频组件无法播放如何定位bug

当 web 前端页面的视频组件无法播放时,可以从以下维度进行分析和定位可能的 bug,分析维度包括但不限于:前端功能点、缓存、异常、后端功能点、资源占用、并发、网络等: 前端功能点: HTML5 视频支持:检查视频…

等保测评2.0——网络安全等级保护测评的初步了解

一、什么是网络安全等级保护测评? 二、网络安全等级保护,保护的是什么? 等级保护对象:网络安全等级保护工作直接作用的对象。(注:主要包括信息系统、通信网络设施和数据资源等) 计算机信息系统…

Qotom Q720G5英特尔赛扬处理器N4000高性价比无风扇迷你电脑5网口软路由防火墙

在数字时代,迷你电脑已经成为高效、灵活的解决方案,无论是个人用户还是企业用户,都能从中受益。Qotom Q720G5 无风扇迷你电脑就是这样一款强大的选择,它不仅可以作为软路由、防火墙和路由器,还有着更多的潜力等待发掘。…

中国手机频段介绍

中国目前有三大运营商,分别是中国移动、中国联通、中国电信,还有一个潜在的运营商中国广电,各家使用的2/3/4G的制式略有不同 中国移动的GSM包括900M和1800M两个频段。 中国移动的4G的TD-LTE包括B34、B38、B39、B40、B41几个频段,…

【C++】C++11介绍

目录 C11的由来 命名趣事 统一的列表初始化 统一的列表初始化的一些关键点和特性: 简单测试代码示例: 示例 1:初始化内置类型和数组 示例 2:初始化类和结构体 示例 3:初始化标准库容器 声明 auto关键字 auto…

基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测 完整代码: 基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测资源-CSDN文库 https://download.csdn.net/do…

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

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