Java集合中的基本数据结构

简介: Java集合中的基本数据结构

1、集合中三大数据结构image.png

1.1 数组

  • 内存地址连续
  • 可以通过下标的成员访问,下标访问的性能高
  • 增删操作有较大的性能消耗(需要动态扩容)image.png

1.2 链表(双向链表)

  • 灵活的空间要求,存储空间不要求连续
  • 不支持下标访问,支持顺序遍历搜索
  • 针对增删操作找到对应的节点改变链表的头尾指针指向即可,无需移动元数据存储位置

image.pngimage.png

1.3 树(Java中二叉树特性)

  • 某节点的左子树节点仅包含小于该节点的值
  • 某节点的右子树节点仅包含大于该节点的值
  • 节点必须是二叉树
  • 顺序排列image.pngimage.png1.3.1 红黑树

红黑树,Red-Black Tree [RBT]是一个自平衡(不是绝对平衡)的二叉查找树(BST),树上的每个节点需要遵循下面的规则

每个节点要么是黑色,要么是红色

根节点为黑色

每个叶子节点(NIL)是黑色

不能存在两个连续的红色节点(红色节点的两个子节点必须是黑色)

任一节点到叶子节点的路径包含相同数量的黑节点

image.png左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左节点变为旋转节点的右子节点,左子节点保持不变image.png

  • 右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变

image.png

  • 变色:节点的颜色由红色变为黑色或者黑色变为红色image.png红黑树插入场景


1、红黑树为空


1.1 插入节点作为根节点并把节点设置为黑色


2、插入节点的父节点为黑节点\


2.1 直接插入


3、插入节点的父节点为红节点


3.1 叔叔节点存在且为红节点


1、P节点和S节点设置为黑色


2、PP节点设置为红色


3、PP设置为当前插入节点


4、再次重复上述步骤


3.2 叔叔节点不存在或者叔叔节点为黑色


3.2.1 P节点是PP节点的左节点


3.2.1.1 插入节点是P节点的左节点


1、P设置为黑色


2、PP节点设置为红色


3、PP节点右旋


3.2.1.2 插入节点是P节点的右节点


1、P节点左旋


2、把P设置为插入节点(此时等于上面的场景)


3、PP节点右旋


3.2.2 P节点是PP节点的右节点


3.2.2.1 插入节点是P节点的右节点


1、P节点设置为黑色


2、PP节点设置为红色


3、PP节点左旋


3.2.2.2 插入节点是P节点的左节点


1、P节点右旋


2、将P设置为插入节点(此时等于上面场景)


3、PP节点左旋


PP节点左旋


3.2.2.2 插入节点是P节点的左节点


1、P节点右旋


2、将P设置为插入节点(此时等于上面场景)


3、PP节点左旋

image.png

目录
相关文章
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
219 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
244 101
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
60 7
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
223 23
|
3月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
3月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
207 12
|
3月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
3月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。

热门文章

最新文章