Java 集合类分析

AEJoy —— 最受欢迎的 5 个 Ae 表达方式 NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。 阅读详情

1.Java集合类



2.各集合类的比较

  

 

 

底层结构

是否有序

是否线程安全

特点

Vector<T>

Object类型的数组

有序

是线程安全

底层是Object数组,但它是线程安全的,性能比ArrayList差,因为很多方法都是线程同步的。可以随机访问,访问速度快。插入元素个数超过容量时,会发生自动扩张,这时会复制元素都新数组,消耗大量时间

ArrayList<T>

Object类型数组

有序

不是线程安全

底层是Object数组,不是线程安全的。可以随机访问,访问速度快。插入元素个数超过容量时,会发生自动扩张,这时会复制元素都新数组,消耗大量时间

LinkedList<T>

内部静态Entry<T>类,作为链表头,Entry内部有元素值,指向上一个和下一个元素的引用。

有序

不是线程安全

实现了List、Deque,可以实现堆栈、队列、双端队列。插入删除速度快,查询速度慢。

HashSet<T>

使用HashMap来保存元素,key就是插入的元素,value都是同一个私有静态final的Object对象

无序

不是线程安全

利用Object类的HashCode()方法获取某元素的hashcode,然后根据这个hashcode来算出物理地址。判断两元素是否相等利用equle,若返回true,则hashcode一定也相等。所以要重写好HashCode和equal方法。

TreeSet<T>

使用TreeMap来保存元素

有序

不是线程安全

同上。

HashMap<K,T>

使用内部静态Entry<T>类,建立一个Entry数组作为头指针。默认的负载因子是0.75,初始容量为6,极限容量为16*0.75.当总元素个数大于极限容量时,数组长度(容量)会增长两倍。(其实就是Hash表链接法,当链表长度大于规定的上限时,会转化为红黑树,这个上限默认为8)

无序

不是线程安全

根据HashCode方法计算hashcode,从而获得数组位置,然后插入到该位置的头部(像栈一样)。负载因子为0.75是一个折中,增大可以它可以减少数组的内存占用,但会增加查询开销。迭代器遍历时,顺序为自然顺序(若有自定义顺序,则按自定义顺序)。在1.8中,resize还能保持原来队列顺序不变,而且不用重新hash,而使用了原hash值+(hash^原数组length)*原数组长度。这样会使得该位若为0,则位置不变。若为1,位置变为hash+length。

LinkedHashMap<K,T>

Hash表和链表结合。继承Entry<T>,在其中增加before和after引用,用于链表。也就是在原来hash表基础上,利用after和before,再加上header来维护双端队列。

有序

不是线程安全

是HashMap的子类,在HashMap基础上,增加了双端队列,同时可以定义顺序方式,一种为插入时的顺序,一种为最近访问从小到多的顺序,

TreeMap<K,T>

Entry<K,V>实现的红黑树

有序

不是线程安全

就是一个红黑树

HashTable<K,T>

同HashMap

无序

线程安全

Hashtable是基于Dictionary类的它不允许key和value为空(HashMap允许一个key为null,多个value为null)。它是线程安全的Map

WeakHashMap<K,T>

同HashMap,同时加上一个ReferenceQueue队列

无序

不是线程安全

Key都是弱键,表示当这个键不再正常使用时,这个键值对就会被放到ReferenceQueue队列里,然后把队列里不用的键值对从Entry里删除。Key和value都允许为null

IdentityHashMap<K,T>

同hashMap

无序

不是线程安全

判断key时,是使用”==”来判断,即判断两个key是否为同一对象。

 


内存泄漏系列专题分析之二十一:高通相机CamX内存泄漏&内存占用分析--GPU内存拆解 通过上述debug方式,可以看到patch补丁可以顺利debug各种ION内存分布,可以通过它分析ION内存占用问题。同时我们还可以分析GPU内存泄漏问题,同样的方式可以看到所有的GPU内存分布,如果某个GPU内存持续增长,就极有可能内存泄漏,然后更具堆栈信息去分析代码,并解决GPU内存泄漏问题。!! 阅读详情

相关推荐

【PCIe】CDNS PCIe VIP 杂记 -- Callback

最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。

小邦是名小ICer的博客 2716

Android开发中各Java集合类性能分析

Java的集合类主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和 Map这三大类的集合。Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而Set不可以重复,而Map一般为key-value这样的对应关系,比如我们常用的HashMap。  一、List 主要有ArrayList、LinkedList、Vecto

RickyStudio的专栏 900

车载以太网抓包实战:100BASE-T1/1000BASE-T1高效监控方案解析

本文深入解析了车载以太网100BASE-T1/1000BASE-T1的高效抓包监控方案。针对智能汽车开发中的故障排查与性能测试需求,详细对比了交换机镜像、TAP分流和捕获模块三大主流方案的原理、核心优势与适用场景,并提供了基于实战经验的选型指南与操作避坑要点,帮助工程师精准定位网络问题。

desk3的博客 428

Java中集合类的性能分析与优化策略

Java中集合类的性能分析与优化策略 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! Java集合框架是Java编程中不可或缺的一部分,它提供了一系列的接口和类来存储和管理数据集合。然而,不同的集合类在不同的使用场景下性能表现各异。本文将对Java中的几种主要集合类进行性能分析,并提出相...

weixin_33961375的博客 197

SAP VC实战:用CU01和CS02搞定BOM里的‘智能’对象相关性(附语法避坑指南)

在工业制造领域,产品配置的复杂性往往超出想象。想象一下,当客户需要定制一台工业设备时,可能有数百种配置选项相互影响——从基础材质到动力系统,从控制模块到安全装置。如何在SAP系统中优雅地管理这种复杂性?对象相关性(Object Dependencies)就是解决这一挑战的利器。

weixin_42524824的博客 467

告别调参玄学:用 DINOv2 (ViT-S/ViT-G) 和 PCA 可视化,直观理解自监督特征

本文深入解析了DINOv2(ViT-S/ViT-G)模型在自监督学习中的特征提取机制,通过PCA降维技术实现特征空间的可视化。文章对比了不同规模模型的特征表达差异,并提供了PCA阈值调优和深度分析的实用技巧,帮助读者直观理解自监督学习的视觉密码。

weixin_42565865的博客 410

Java集合类源码分析汇总

转自:http://www.cnblogs.com/hzmark/archive/2013/01/05/JavaCollectionSum.html Java集合类基础:http://www.cnblogs.com/hzmark/archive/2012/12/17/CollectionBase.html ArrayList源码分析:http://www.cnblogs.com/h

舟 2462

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

Java基础-源码分析-集合类源码分析与思路

Java工程师知识树 / Java基础 总结下阅读集合类源码的思路: 1. 结合JDK的API文档阅读源码 JDK1.6软件包 java.util在线中文版API JDK 1.8 API 帮助文档-中文版 百度网盘链接:https://pan.baidu.com/s/1E5Xyw3O1IED02-hBoQbvAw 提取码: 969k 2. Java集合类阅读源码思路: 1.集合类特点 比如ArrayList有序可重复,查询快插入删除慢,HashSet不重复线程不完全等. 抱有问题去阅读类的源码 2

hughjin 238

手把手教你学pcie--用Verilog搭建PCIe控制器核心模块

PCIe控制器是硬件设计的核心模块,负责实现设备与主机之间的高速通信。本文将以Verilog语言为例,分步骤讲解如何从零构建一个简化的PCIe控制器核心模块,涵盖事务层(TLP)生成、数据链路层(DLLP)处理和物理层(PHY)接口适配。目标是为嵌入式开发者、FPGA工程师提供一个可扩展的硬件设计框架。​。

MHD0815的博客 340

5.1 rocr-runtime libhsakmt event 机制全景—从 Doorbell 到 Signal

本文介绍了ROCm/KFD中的Event机制架构,主要解决GPU异步计算中的反馈问题。Event机制分为三层:硬件层触发事件,内核层管理事件通知,用户态接收处理。事件类型分为三大类:同步类事件(如SIGNAL、QUEUE_EVENT)用于任务完成通知,异常类事件(如MEMORY、HW_EXCEPTION)报告错误,拓扑类事件(如NODECHANGE)处理设备变更。该机制通过共享内存和中断实现高效通信,避免CPU轮询开销。后续文章将深入内核实现、Thunk层封装和多队列完成检测实战。

图形/计算GPU的驱动与虚拟化技术分享园地 1307

java集合类原理_从源码分析java集合类原理(1)-ArrayList原理分析

ArrayList是一个使用频率极高的集合类,比如数据库查询返回多条数据的时候都会使用ArrayList来保存数据,ArrayList的底层数据结构其实就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。我们先从构造函数入手,ArrayList共有三个构造函数,下面我们来分别对这三个构造函数进行一个详细的分析。(1)、带初始容量构造函数。此构造函数指定...

weixin_33788424的博客 96

【全覆盖算法】栅格地图实现布氏单元分解算法+栅格地图实现牛耕Boustrophedon Cellular Decomposition Path Planning

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 282

Android开发之Java集合类性能分析

Android开发之Java集合类性能分析 2011年7月6日10:16 来源:Android中文网 我有话说(0人参与)   对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和 Map这三大类的集合,今天就他们的子类在标准情况和多线程下的性能做

足球中国的专栏 537

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java集合类源码分析

Java集合类源码分析〇、说明一、Object类1. 继承结构2. 构造方法3. 常用方法和参数5. native关键字二、ArrayList类0. 数据结构1. 继承结构2. 构造方法3. 常用方法和属性三、 HashMap类0. 数据结构1. 继承结构2. 构造方法3. 常用方法和参数 〇、说明 集合类特性 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类...

木瓜有益健康的博客 753

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[转] Java集合类性能分析

【转】对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和Map这三大类的集合,今天Android吧(ard8.com)就他们的子类在标准情况和多线程下的性能做简单的分析。 Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而Set不可以重复,而...

weixin_33859844的博客 216

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

转载:java集合类数据结构分析

数组是 最常用的数据结构。数组的特点是长度固定,可以用下标索引,并且所有的元素的类型都是一致的。数组常用的场景有把:从数据库里读取雇员的信息存储为 EmployeeDetail[],把一个字符串转换并存储到一个字节数组中便于操作和处理,等等。尽量把数组封装在一个类里,防止数据被错误的操作弄 乱。另外,这一点也适合其他的数据结构。 列表和 数组很相似,只不过它的大小可以改变。列表一般都是...

dco29007的博客 209

Java集合类性能分析

【转】对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和Map这三大类的集合,今天Android吧(ard8.com)就他们的子类在标准情况和多线程下的性能做简单的分析。 Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而...

weixin_30674525的博客 91

Java集合类性能分析2

对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和Map这三大类的集合,今天Android吧(ard8.com)就他们的子类在标准情况和多线程下的性能做简单的分析。        Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而Set不可以重复,

sanjiaozhen的专栏 509

java常见的集合类_JAVA常见的集合类特点分析

java集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用,集合类型主要有3种:set(集)、list(列表)和map(映射)。Java API中所用的集合类,都是实现了Collection接口,它的一个类继承结构如下:CollectionCollectionCollectionCollectionCollect...

weixin_39962889的博客 135
上一篇: Java final关键字
下一篇: class.forName和Classloader的区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值