学习Java中的数据结构及API这一篇就够了

Java中的数据结构及API

  • 1. 线性表
    • 1-1. 顺序表
      • Array数组
      • ArrayList集合
    • 1-2. 链表
      • 自定义链表
      • LinkedList
  • 2. 队列
    • 2-1. ArrayDeque
    • 2-2. LinkedList
    • 2-3. 区别
  • 3. 栈
    • 3-1. ArrayDeque
    • 3-2. LinkedList
  • 4. 树
    • 4-1. 二叉树定义
  • 5. 图
    • 5-1. 图定义

在这里插入图片描述

1. 线性表

1-1. 顺序表

顺序表是指用一组地址连续的存储单元依次存储数据元素的线性结构。

Array数组

Array是固定大小的顺序表,定义为:

int[] arr = new int[] {1,2,3,4,5};

ArrayList集合

ArrayList是可以动态扩容的顺序表。

在这里插入图片描述
在这里插入图片描述

1-2. 链表

自定义链表

单链表节点

public class ListNode {int val; // 值ListNode next; // 指向下一个节点ListNode(int x) { val = x; }
}

双链表节点

public class ListNode {int val; // 值ListNode next; // 指向下一个节点ListNode pre; // 指向上一个节点ListNode(int x) { val = x; }
}

LinkedList

在这里插入图片描述
此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。

2. 队列

QueueDeque接口都是队列的数据结构

  • Queue是普通队列的接口
  • Deque是双端队列的接口

在这里插入图片描述


在这里插入图片描述

2-1. ArrayDeque

ArrayDeque是Java集合框架中的一个双端队列(Deque)实现类。它基于数组实现,可以在两端高效地插入和删除元素。

实现原理

  • ArrayDeque内部维护了一个循环数组,通过两个指针(frontrear)来标记队列的头部和尾部。当向队列中添加元素时,rear指针向后移动;当从队列中删除元素时,front指针向后移动。如果数组满了,ArrayDeque会自动扩容。
  • ArrayDeque的底层数组长度是2的幂次方,这样可以通过位运算来实现循环队列的操作,提高性能。

2-2. LinkedList

LinkedList也是Java集合框架中的一个双端队列(Deque)实现类。它基于链表实现,可以在任意位置高效地插入和删除元素。

实现原理

  • LinkedList内部使用双向链表来存储元素。每个节点都包含一个前驱节点和一个后继节点的引用。通过这种方式,LinkedList可以在任意位置高效地插入和删除元素。
  • LinkedList还有一个头结点和尾节点的引用,分别表示链表的头部和尾部。通过这两个引用,可以快速访问到链表的第一个和最后一个元素。

2-3. 区别

  1. ArrayDeque不允许null元素,而LinkedList则允许null元素。
  2. 如果是使用栈/队列操作,ArrayList明显快于LinkedList
  3. LinkedList实现了List接口 ,可以将值插入到指定位置处。

3. 栈

3-1. ArrayDeque

同上,只是操作API方法的不同

3-2. LinkedList

同上,只是操作API方法的不同

4. 树

树又分为:二叉树、二叉搜索树、平衡二叉树、红黑树、B树等。

4-1. 二叉树定义

public class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
}

5. 图

5-1. 图定义

图有节点和边组成,实现的方式有:

Map<Integer, List<int[]>> graph = new HashMap();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317243.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners Paper&#xff1a;https://arxiv.org/abs/2303.09769 Code&#xff1a;https://github.com/FutureXiang/ddae TL; DR&#xff1a;扩散模型的训练其实就是训练一个去噪模型&#xff0c;考虑到类似…

大数据概念:数据网格和DataOps

数据网格&#xff08;Data Mesh&#xff09; 一种新型的数据架构模式&#xff0c;旨在解决传统数据架构中存在的一些问题&#xff0c;例如数据孤岛、数据冗余、数据安全等。数据网格将数据作为一种服务&#xff0c;通过在分布式环境中提供数据服务&#xff0c;实现数据的共享和…

cJSON代码解读

1、背景 cJSON用了很久&#xff0c;但是对它一直不太了解。这次向添加对long long类型的支持&#xff0c;一直出问题。因为有以前添加两位小数float的经历&#xff0c;我觉得会很轻松&#xff0c;没想到翻车了。于是有了这边文档&#xff0c;阅读了部分博主对cJSON的解析&…

《动手学深度学习》学习笔记 第7章 现代卷积神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知识&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

挑战Python100题(9)

100+ Python challenging programming exercises 9 Question 81 Please write a program to randomly print a integer number between 7 and 15 inclusive. Hints: Use random.randrange() to a random integer in a given range. 请编写一个程序,随机打印一个介于7和15之间…

Redis(二)

1、redis的持久化 "Redis 如何将数据写入磁盘"&#xff0c;首先要明白的时候&#xff0c;我们使用的redis的数据保存在内存上的&#xff0c;也就是说&#xff0c;只要我们的电脑关机或者重启服务器&#xff0c;那么在内存中的数据就会消失&#xff0c;所以要想持久化…

【深度学习-基础学习】Transformer 笔记

本篇文章学习总结 李宏毅 2021 Spring 课程中关于 Transformer 相关的内容。课程链接以及PPT&#xff1a;李宏毅Spring2021ML这篇Blog需要Self-Attention为前置知识。 Transfomer 简介 Transfomer 架构主要是用来解决 Seq2Seq 问题的&#xff0c;也就是 Sequence to Sequence…

高压放大器的工作原理和使用方法是什么

高压放大器是一种用于产生高电压输出信号的电子设备&#xff0c;通常用于科学研究、医疗、工业和通信领域。它的工作原理涉及到电路设计、放大器拓扑结构、元件选型和功率供应等多个方面。下面将详细介绍高压放大器的工作原理和使用方法。 一、工作原理 放大器拓扑结构&#xf…

msvcp140.dll丢失的错误解决办法,msvcp140.dll丢失的原因

如果你的电脑中正处于msvcp140.dll丢失或找不到msvcp140.dll的问题&#xff0c;那么可以尝试使用下面的方法进行解决msvcp140.dll丢失的问题。其实msvcp140.dll文件丢失的问题解决办法也很简单&#xff0c;但是出现msvcp140.dll丢失的问题却可能是有很多原因。接下来就给大家分…

IP地址、子网掩码与网络地址

一、IP地址 在 TCP/IP 体系中&#xff0c;IP 地址是一个最基本的概念。IP地址的作用&#xff1a;实现和网上的其他设备进行通信 IP地址的表示方法 互联网上的每台主机&#xff08;或路由器&#xff09;的每个接口都分配一个全世界唯一的IP地址。该IP地址由ICANN分配。 IP地址…

一文搞懂数据资产化和数据要素两级市场

在数字化时代&#xff0c;数据已经成为驱动经济社会发展的核心要素。数据资产化和数据要素市场的兴起&#xff0c;是这一时代发展的必然产物。本文将通过简洁明了的方式&#xff0c;为您解读数据资产化和数据要素的内涵及其相互关系。 一、数据资产化 数据资产化&#xff0c;简…

解决计算机vcruntime140_1.dll丢失问题。6种常见的解决方法分享

在日常计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中最常见的就是“找不到vcruntime140_1.dll”的错误。那么&#xff0c;vcruntime140_1.dll是什么文件&#xff1f;它为什么会丢失&#xff1f;又该如何解决呢&#xff1f;本文将为您详细介绍vcrunt…