文章目录

  • 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常见数据集合分析相关推荐

  1. java大数据日志分析与可视化设计

    伴随着大数据科技的发展和成熟,越来越多的企业和机构使用大数据来进行分析和决策.其主要的分析数据来源于日志文件,所以对日志文件的分析是很重要的也是很关键的步骤. 本系统实现的功能是,将日志信息生成.日志 ...

  2. java常见数据算法_冒泡排序

    常见的算法有非常多,今天我们就一起看看常见的算法之冒泡排序. 冒泡排序的主要核心思想就是: 比较相邻两个元素,如果前一个元素的值比后一个元素的值大,则进行交换,经过对每个元素的比较,最后将最大的元素设 ...

  3. java常见数据校验

    /*** 手机号验证* * @param str* @return 验证通过返回true*/public static boolean isMobile(String str) {Pattern p ...

  4. java 迁移数据_Java 9迁移指南:七个最常见的挑战

    java 迁移数据 我敢肯定,您已经听说过更新到Java 9并不是一件容易的事,甚至可能是不兼容的更新,而且对于大型代码库而言,迁移毫无意义. 这样做之后,我迁移了一个相当大的旧代码库,我可以告诉你, ...

  5. Java核心(四)你不知道的数据集合

    导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List. ...

  6. 开课吧:常见的数据可视化分析工具有哪些?

    数据分析工作的完成,既需要拥有良好的方式方法,同时还需要借助分析工具,这也是数据分析师需要熟练使用数据分析工具的主要原因,那么常见的数据可视化分析工具有哪些呢? 常见的数据可视化分析工具有哪些? 1. ...

  7. 常见的数据集合——栈

    一.简介 栈(Stack)是一种特殊的线性数据集合,按照后进先出的规则进行操作,当我们在对栈进行入栈(push())或出栈(pop())操作时,只可以在栈顶进行操作.栈的实现结构可以是一维数组或链表来 ...

  8. Java中常见的集合框架及常用的方法

    本篇文章主要说明Java中一些常见的集合框架及经常用到的一些方法 , 由于都是一些父类 , 所以没有做太深入的分析说明 , 后面的文章将会分别对List , Set , Map及其常用子类进行深入研究 ...

  9. Java常见加密使用和分析

    Java常见加密使用和分析 最近项目里碰到很多加解密的场景,使用多种加密的方式,大概整理了一下,一共有一下几种 加密方式 安全性 是否可逆 1 MD5 高 不可逆 2 AES 中 可逆 3 RSA 高 ...

最新文章

  1. 互联网的本质:也论 Web2.0 和 Web1.0
  2. 用作键提取器的函数的 Boost.MultiIndex 示例
  3. php中的fpm_PHP中的FPM是做什么的
  4. OLAP组件-Clickhouse源码
  5. C#事件的自定义声明
  6. Server 2012 R2 RMS文档管理系统
  7. 推荐STM32F030K6T6国产兼容替换芯马XM1008K6T6
  8. MyBatis 大于小于符号表示
  9. 冲刺中高考,AI辅助学习靠谱吗?
  10. 《戴尔·卡耐基传记》--[美]戴尔·卡耐基
  11. 2022华为机试社招OD高频考试真题【9, 10月份Q2, Q3考试新编程题目】
  12. 华为eNSP 配置DHCP自动分配IP地址
  13. MPC5748g基于源码实现ENET-PING实验(编译+调试)
  14. 战神遗迹服务器未响应怎么回事,战神遗迹怎么进不去 黑屏闪退解决方法介绍...
  15. 干物妹小埋 树状数组
  16. 饭谈:软件测试的下水道井盖为什么是圆的?
  17. 自适应螺旋飞行麻雀搜索算法
  18. 傅立叶(逆)变换的计算
  19. jq ajax请求php原声,原生JS与jQuery对AJAX的实现
  20. matlab conj函数用法,conj(conj的用法)

热门文章

  1. Typora的读法与基本使用
  2. s7正在升级android,Tinker更新成功后在华为Mate9,三星S7等Android7.0以上系统重新打开app闪退...
  3. 上海市计算机信息技术水平考试,2020年上海市高等学校信息技术水平考试试卷...
  4. django启用超级管理员_如何启用和连接Django管理界面
  5. 卡西欧手表显示html,卡西欧手表(MTP-1246D)肿么调整日期、星期以及24小时显示?
  6. KEIL5与Proteus联调设置
  7. Eclipse 设置单个项目编码以及设置所有项目编码
  8. Centos7安装Squid代理服务及配置透明代理
  9. 三星c9pro语言,三星C9Pro评测 为什么被认为专门为中国用户量身打造的一款产品...
  10. 如何用css实现边框上的小箭头?