java - 什么时候使用哪种数据结构?

标签 java data-structures

<分区>

我正在学习软件开发基础类(class)中的数据结构。我遇到过以下数据结构:

  • 结构
  • 数组
  • 列表
  • 队列
  • 哈希表

...等等。我非常了解它们的工作原理,但我很难理解何时何地使用它们。

我可以识别队列数据结构的使用,因为这有助于打印机和/或线程排队和确定优先级。

了解数据结构的优点和缺点并在代码中实现它是两回事,我发现前者很困难。

使用上面列出的每个数据结构的简单示例是什么?

例如:

Queue:先进先出→用于打印机队列对文档进行排队

最佳答案

当我第一次开始编程时,我很难理解它们,所以我决定先提醒一下。

我尽量做到简单。尝试 Oracle Docs 获取更多详细信息


Struct:当您需要类似对象的结构时,您可以在其中对相关数据进行分组,请使用结构。尽管在 Java 中很少使用结构(因为对象是在它们的位置创建的)

数组:数组是连续的内存。当您需要基于索引的固定时间访问时,与链表不同,数组非常快,因此请使用它们。

但是数组的积压是你需要在初始化的时候知道大小。此外,数组不支持更高级别的方法,例如 add()、remove()、clear()、contains()、indexOf() 等。


List:是一个可以使用Arrays(ArrayList)实现的接口(interface) 或链表(LinkedList)。它们支持前面指定的所有更高级别的方法。

此外,列表会在空间不足时自行调整大小。您可以指定将创建底层数组或链表的初始大小,但只要达到限制,它就会创建更大尺寸的底层结构,然后复制初始结构的内容。


队列或堆栈: 是一种实现技术,并不是真正的数据结构。如果你想要 FIFO 实现,你可以在 Arrays 或 LinkedList 上实现 Queue(是的,你可以在这两种数据结构上实现这种技术) https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues


HashMap:只要您想存储键值对,就会使用 Hashmap。如果您注意到,您不能为此目的使用数组或链表或任何其他提到的数据结构。一个键可以是从字符串到对象的任何东西(但注意它必须是一个对象,不能是原始类型),一个值也可以是任何对象


google 出每个数据结构以获取更多详细信息

关于java - 什么时候使用哪种数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030141/

相关文章:

java - Tomcat Web 应用程序无法在网络上写入文件

java - GWT 中的请求间信令

Java 静态 vs Ruby 的 self

c++ - C++ 中的 set 和 unordered_set 有什么区别?

algorithm - 可能的最小堆数?

java - 如何解决 NumberFormatException : Empty string?

c# - ado.net 的 Microsoft Sync 框架可以与 Java 一起使用吗?

python - 对python中的元组列表进行排序

总和为 100 的一组可修改概率的算法/数据结构

algorithm - 二叉树的密度