java常见数据集合分析
文章目录
- 1. hashmap
- 2. hashset
- 3. HashTable
- 3. ArrayList
- 4. Vector & Stack
- 5. collection
1. hashmap
实现map接口,按键值对存储,按键计算hash值,可直接用key值获取value对象,比较方便
new HashMap()时,不会分配数组空间,在第一次添加值时会初始化数组tab[],默认大小16,加载因子0.75,当map中对象个数到达阈值(默认基础阈值threshold=16*0.75)进行数组按threshold=threshold << 1两倍扩容
int index = (n - 1) & hash;// 对象节点所在数组下标
存放数字时无序,不可重复key值
底层是哈希表的数据结构,如下。这里提一下,hashmap在jdk1.8引入了红黑树结构
- 添加节点时,在jdk1.8中后面的链表在链表长度大于等于8时,会将链表转为红黑树结构;
- 在红黑树结构中,resize()时只有≦6的节点个数 或者 移除节点时根节点只有左子树或者右子树,将树转为普通链表
线程不安全
2. hashset
hashset是基于hashmap实现的,可以把它当成一个value为空的hashmap,是对hashmap的封装和利用。实现set接口,按对象存储,按存储对象计算hash值,要全部迭代才能一一读出对象。
存放数字时无序,不可重复值
底层数据结构与hashmap一致
线程不安全
3. HashTable
实现map接口,按键值对存储,按键计算hash值,可直接用key值获取value对象,比较方便
new HashTable()时,会分配数组空间tab[],默认大小11,加载因子0.75
底层是哈希表的数据结构
底层数据结构与hashmap一致
在涉及修改的方法上加上了synchronized关键字,线程安全
3. ArrayList
实现List接口,存放数据无序
默认1.5倍扩容
oldCapacity + (oldCapacity >> 1)
底层数据结构为数组
线程不安全
4. Vector & Stack
Stack就是把Vector数组封装成栈,关键操作加上了synchronized,线程安全
Vector底层数据结构为数组,与ArrayList基本一致,关键修改操作加上了synchronized,线程安全
Vector在未指定增长因子capacityIncrement时 是1倍扩容
oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity)
5. collection
数据集合的基本接口有两种,collection和map。实现collection接口的子接口有Set,List,Queue,他们的实现类应该很清楚了,是我们常用的hashset,arraylist等,collection是它们的公共接口。而这里想提到的是collection中的三个易混淆方法,用于集合的交并差集,retainAll,containsAll和removeAll:
boolean retainAll(Collection<?> c)
:调用此方法除去collection中不存在于c中的元素。换句话说,如果collection中的元素在c中没有找到,则会去掉collection中的这一元素,并且返回true(collection被改变则会返回true);如果collection中的所有元素在c中都可以找到,则不会改变collection并且返回false。这里也就是相当于一个另类的求两个集合的交集。
例如:
c1: 1,2,2
c2: 1,2
c1.retainAll(c2);//这里会返回false,因为c1中的元素在c2中都存在,不需要改变,则返回false
boolean containsAll(Collection<?> c)
:调用此方法判断collection是否包含c中的所有元素
boolean removeAll(Collection<?> c)
:调用此方法去掉所有collection中存在于c中的元素,和retainAll差不多,如果colletion没有改变,则返回false,否则返回true。这里也就是相当于一个另类的求两个集合的差集。
例如:
c1: 1,2,2,3
c2: 1,2
c1.removeAll(c2);//这里会返回true,因为c1中的元素在c2中都存在,c1中的元素除了3之外会被全部移除,c1最后输出只有3
java常见数据集合分析相关推荐
- java大数据日志分析与可视化设计
伴随着大数据科技的发展和成熟,越来越多的企业和机构使用大数据来进行分析和决策.其主要的分析数据来源于日志文件,所以对日志文件的分析是很重要的也是很关键的步骤. 本系统实现的功能是,将日志信息生成.日志 ...
- java常见数据算法_冒泡排序
常见的算法有非常多,今天我们就一起看看常见的算法之冒泡排序. 冒泡排序的主要核心思想就是: 比较相邻两个元素,如果前一个元素的值比后一个元素的值大,则进行交换,经过对每个元素的比较,最后将最大的元素设 ...
- java常见数据校验
/*** 手机号验证* * @param str* @return 验证通过返回true*/public static boolean isMobile(String str) {Pattern p ...
- java 迁移数据_Java 9迁移指南:七个最常见的挑战
java 迁移数据 我敢肯定,您已经听说过更新到Java 9并不是一件容易的事,甚至可能是不兼容的更新,而且对于大型代码库而言,迁移毫无意义. 这样做之后,我迁移了一个相当大的旧代码库,我可以告诉你, ...
- Java核心(四)你不知道的数据集合
导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List. ...
- 开课吧:常见的数据可视化分析工具有哪些?
数据分析工作的完成,既需要拥有良好的方式方法,同时还需要借助分析工具,这也是数据分析师需要熟练使用数据分析工具的主要原因,那么常见的数据可视化分析工具有哪些呢? 常见的数据可视化分析工具有哪些? 1. ...
- 常见的数据集合——栈
一.简介 栈(Stack)是一种特殊的线性数据集合,按照后进先出的规则进行操作,当我们在对栈进行入栈(push())或出栈(pop())操作时,只可以在栈顶进行操作.栈的实现结构可以是一维数组或链表来 ...
- Java中常见的集合框架及常用的方法
本篇文章主要说明Java中一些常见的集合框架及经常用到的一些方法 , 由于都是一些父类 , 所以没有做太深入的分析说明 , 后面的文章将会分别对List , Set , Map及其常用子类进行深入研究 ...
- Java常见加密使用和分析
Java常见加密使用和分析 最近项目里碰到很多加解密的场景,使用多种加密的方式,大概整理了一下,一共有一下几种 加密方式 安全性 是否可逆 1 MD5 高 不可逆 2 AES 中 可逆 3 RSA 高 ...
最新文章
- 互联网的本质:也论 Web2.0 和 Web1.0
- 用作键提取器的函数的 Boost.MultiIndex 示例
- php中的fpm_PHP中的FPM是做什么的
- OLAP组件-Clickhouse源码
- C#事件的自定义声明
- Server 2012 R2 RMS文档管理系统
- 推荐STM32F030K6T6国产兼容替换芯马XM1008K6T6
- MyBatis 大于小于符号表示
- 冲刺中高考,AI辅助学习靠谱吗?
- 《戴尔·卡耐基传记》--[美]戴尔·卡耐基
- 2022华为机试社招OD高频考试真题【9, 10月份Q2, Q3考试新编程题目】
- 华为eNSP 配置DHCP自动分配IP地址
- MPC5748g基于源码实现ENET-PING实验(编译+调试)
- 战神遗迹服务器未响应怎么回事,战神遗迹怎么进不去 黑屏闪退解决方法介绍...
- 干物妹小埋 树状数组
- 饭谈:软件测试的下水道井盖为什么是圆的?
- 自适应螺旋飞行麻雀搜索算法
- 傅立叶(逆)变换的计算
- jq ajax请求php原声,原生JS与jQuery对AJAX的实现
- matlab conj函数用法,conj(conj的用法)
热门文章
- Typora的读法与基本使用
- s7正在升级android,Tinker更新成功后在华为Mate9,三星S7等Android7.0以上系统重新打开app闪退...
- 上海市计算机信息技术水平考试,2020年上海市高等学校信息技术水平考试试卷...
- django启用超级管理员_如何启用和连接Django管理界面
- 卡西欧手表显示html,卡西欧手表(MTP-1246D)肿么调整日期、星期以及24小时显示?
- KEIL5与Proteus联调设置
- Eclipse 设置单个项目编码以及设置所有项目编码
- Centos7安装Squid代理服务及配置透明代理
- 三星c9pro语言,三星C9Pro评测 为什么被认为专门为中国用户量身打造的一款产品...
- 如何用css实现边框上的小箭头?