首页 > 编程语言 >Java容器集合

Java容器集合

时间:2024-05-30 21:11:30浏览次数:25  
标签:容器 Java LinkedList ArrayList bucket 链表 key 集合 HashMap

简单示意图

详细示意图

ArrayList 和 LinkedList 区别

  1. ArrayList(默认size为10) 是实现了基于动态数组的数据结构,LinkedList 基于双向链表的数据结构。
  2. 对于随机访问 get 和 set,ArrayList 效率优于 LinkedList,因为 LinkedList 要移
    动指针。
  3. 对于新增和删除操作 add 和 remove,LinkedList 比较占优势,因为 ArrayList 要
    移动数据。 这一点要看实际情况的。若只对单条数据插入或删除,ArrayList 的速度反
    而优于 LinkedList。但若是批量随机的插入删除数据,LinkedList 的速度大大优于
    ArrayList. 因为 ArrayList 每插入一条数据,要移动插入点及之后的所有数据。

HashMap

HashMap 继承了 AbstractMap 抽象类,而 AbstractMap 实现了 Map 接口,是一个 K,V 存储方式,允许 nullKey nullValue

在 JDK8 中,底层实现方式是数组+链表或红黑树,在默认情况下创建 HashMap 它的 size 为 16,负载因子默认为 0.75,当链表长度大于 8,并且数组长度大于 64 时,链表转为红黑树。当链表长度小于等于 6 时,转为链表 数组扩容机制,是根据负载因子计算的,当动态数组存储数量>=负载因子 * size 则进行翻倍扩容

如何解决 hash 碰撞:也就是刚才说的链表或红黑树,每一个数组位置都相当于一个 bucket,每个 bucket 都会存储多个 Node 节点,而这个 Node 又实现了 Entry,这个类都是 HashMap 的内部类,他们的类中都包含了, hash 值、key 值、value 值、next 节点,如果出现 hash 碰撞我们会在同一个 bucket 中存储多个 Node

如何 get 到 HashMap 的一个 key,首先我们会根据 key 值计算出一个 hash 位置,找到对应的 bucket,接着我们根据 key 来遍历该 bucket 中的链表或红黑树,直到找到相应的 Node 并返回

HashSet

HashSet 的内部采用 Hash Map 来实现。 由于 Map 需要 key 和 value ,所以所有 key
都有一个默认 value。类似于 Hash Map ,HashSet 不允许重复的 key ,只允许有一个 null key ,
意思就是 HashSet 中只允许存储一个 null 对象。

标签:容器,Java,LinkedList,ArrayList,bucket,链表,key,集合,HashMap
From: https://www.cnblogs.com/dragon-925/p/18222650

相关文章

  • java单元测试:spring测试模块
    Spring测试模块为开发者提供了一套强大的工具,用于在Spring应用中进行单元测试、集成测试和端到端测试。1.测试框架集成Spring测试模块与多个测试框架集成,最常用的是JUnit5和TestNG。JUnit5集成使用@ExtendWith(SpringExtension.class)注解来启用Spring测......
  • Docker的数据管理(数据卷+数据卷容器)
    文章目录一、Docker的数据管理1、概述2、主要的技术(三种数据挂载方式)2.1、数据卷(Volumes)2.2、绑定挂载(Bindmounts)2.3、tmpfs挂载(Tmpfsmounts)2.4、之间的关系(数据在Docker主机上的存储位置)二、数据卷示例1、创建一个命名的数据卷2、修改数据卷内文件内容3、启动两个容......
  • 推荐一个小而全的 Java 工具类库,再也不用重复造轮子,简直太优雅(带私活源码)
    上周接到老大的需求说让整理下工具类,新项目要用,本想直接拿以前的改改直接用的,结果发现以前的工具类存在很多问题,光加解密工具类就重复写了很多个。赶紧跑去找有经验的同事商量对策,最终在Github上找到Hutool这款神器。简介Hutool是一个小而全的Java工具类库,通过静态......
  • Java--hashmap如何根据value排序
    java中map根据value排序在Java中,Map是一种非常常用的数据结构,它通过键值对的形式存储数据,Map本身是无序的,但是在实际应用中,我们有时需要根据Map的值来进行排序,本文将介绍如何使用Java中的Map来实现根据Value排序。Map转TreeMap在Java中,可以使用TreeMap来根据HashMap的值......
  • JavaWeb笔记整理+图解——Filter过滤器
    欢迎大家来到这一篇章——Filter过滤器监听器和过滤器都是JavaWeb服务器三大组件(Servlet、监听器、过滤器)之一,他们对于Web开发起到了不可缺少的作用。ps:想要补充Java知识的同学们可以移步我已经完结的JavaSE笔记,里面整理了大量详细的知识点和图解,可以帮你快速掌握Java编程的......
  • Spire.Office for Java 9.5.0 is released
    Spire.OfficeforJavaisacombinationofEnterprise-LevelOfficeJavaAPIsofferedbyE-iceblue.ItincludesSpire.DocforJava,Spire.XLSforJava,Spire.PresentationforJava,Spire.PDFforJavaandSpire.BarcodeforJava.DeveloperscanuseSpire.Off......
  • Java面试进阶指南:高级问题与解答精粹(一)
    Java面试问题及答案1.什么是Java内存模型(JMM)?它的作用是什么?答案:Java内存模型(JMM)是一个抽象的概念,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下如何保证这些变量的可见性、原子性和有序性。JMM的作用是确保在并发编程中,不同线程之间对共享变量的操......
  • Java面试进阶指南:高级问题与解答精粹(二)
    Java面试问题及答案1.什么是Java内存模型(JMM)?请简述它的作用。答案:Java内存模型(JMM)是一个抽象的概念,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下如何保证数据的一致性。JMM规定了线程如何与主内存(所有线程共享的内存)交互,以及如何通过工作内存(每个......
  • Java进阶指南:高级面试问题与精辟解答(一)
    Java面试问题及答案1.请解释什么是Java内存模型(JMM)?它在并发编程中扮演什么角色?答案:Java内存模型(JMM)是一个抽象的内存模型,它定义了Java程序中变量的访问规则,以及在并发环境下如何保证内存操作的原子性、可见性和有序性。JMM确保了在多线程环境下,不同线程间对共享变量的......
  • Java进阶指南:高级面试问题与精辟解答(三)
    Java面试问题及答案1.什么是Java中的多态性?答案:多态性是Java中的一个重要特性,它允许一个引用类型可以指向多种实际类型的对象,并根据对象的实际类型调用相应的方法。多态性主要通过方法重载(静态多态)和方法重写(动态多态)来实现。方法重载发生在编译时,而方法重写发生在运行......