数据结构和算法是编程的支柱,这里有6个Java程序员应该学习的基本数据结构
扫码关注《Java学研大本营》,加入读者群,分享更多精彩
数据结构是程序的构建块。甚至有人说“数据结构+算法=程序”。这就是为什么良好的数据结构知识对于任何程序员(包括 Java 开发人员)都非常重要,这就是为什么每个程序员都应该努力学习尽可能多的数据结构和算法。
数据结构为您提供了存储数据的选项,以便您可以根据需要访问它。例如,如果您想根据用户名进行快速搜索,那么您可以使用HashMap,但这只有在您了解数据结构及其在您使用的编程语言中的实现时才有可能,这就是您将在本文中学习的内容。(https://www.java67.com/2013/02/10-examples-of-hashmap-in-java-programming-tutorial.html)
Java API 提供了对常见数据结构的内置支持,这对于编写数组、链表、映射、集合、堆栈和队列等程序至关重要。你不需要自己实现这些数据结构,你可以直接在你的程序中使用它,这得益于Java API提供的丰富高效的实现。
这也是Java 是最好的编程语言的原因之一。由于数据结构是任何程序的核心,并且特定数据结构的选择会显着影响 Java 应用程序的功能和性能,因此值得努力探索 Java 中可用的不同数据结构。
这些数据结构中的许多都是非常流行的 Java 集合框架的一部分,几乎所有的 Java 程序都可能,除了hello world以一种或另一种形式使用集合。
在本 Java 教程中,我们将了解标准数据结构。数组、链表、堆栈、队列、映射、集合,以及它们是如何在 Java 中实现的,以及如何使用它们。
数据结构和算法对于成为更好的开发人员至关重要,您在时间、金钱和学习努力方面所做的任何投资都将在很长一段时间内为您带来回报。
Java 程序员和软件开发人员的 6 种基本数据结构
这是我的标准 Java API 和编程语言本身的基本数据结构列表,因为数组是编程语言本身的一部分,而其他数组是流行的 Java 集合框架的一部分。
随着 Java 8 出现Lambda 表达式、函数式接口和Streams,这将为 Java 集合框架赋予新的生命,尤其是在利用现代 CPU 的多核架构的背景下。
现在是初学者了解 Java 编程中可用的基本数据结构并充分利用它们的时候了。
1. 数组
Java 编程语言在语言本身中提供了对数组的内置支持。它有一种特殊的语法来声明一个像 int[] 这样的数组,它是一个原始 int 类型的数组。您可以创建一个包含引用类型和原语的数组。
此外,与 C 编程语言不同,Java 中的数组是有界的,如果您使用无效索引,您将得到 ArrayIndexOutOfBoundException。
Java中的数组也是同质的,你不能在一个数组中存储多种类型的对象——就像你只能在一个String[]中存储一个String,如果你尝试存储Integer,你会在运行时得到ArrayStoreException。
2.链表
除了数组,链表是编程中的另一种基本数据结构。Java 提供了双向链表实现,如 java.util.LinkedList,只要需要链表数据结构,就可以使用这个类。
由于 LinkedList 是 Collection 框架的一部分,因此它还实现了 Collection 和 Iterable 接口,允许对其进行迭代。您可以查看本文以了解有关Java 中的 LinkedList 的更多信息。((http://java67.blogspot.com/2012/12/difference-between-arraylist-vs-LinkedList-java.html))
3.哈希表
哈希表、映射或字典是我见过的最通用的数据结构之一。我碰巧偶尔使用 Map,幸运的是,Java API 提供了 Map 数据结构的几种实现,以满足不同的需求,如 HashMap、Hashtable 和 ConcurrentHashMap。
它也称为 map 或字典数据结构,您可能听说过 Python 中的 Dictionary,它与 Java 中的 Map 相同。
如果您知道键,则映射为您提供了 O(1) 功能来获取值,这在大多数 Java 应用程序中是一个非常自然的用例。
4.堆栈
Java API 还提供了一个实现为 java.util.Stack 的 Stack 数据结构。此类扩展了用于存储元素的传统 Vector 类。由于栈是一个 LIFO(后进先出)数据结构,它提供了一个 push() 方法来插入对象和一个 pop() 方法来从顶部消费元素。
堆栈在评估表达式等不同的编程任务中非常流行。顺便说一句,不要将 Stack 数据结构与栈内存混淆,栈内存用于在 Java 中存储局部变量和方法帧。
5.排队
队列数据结构也可以在 Java 集合框架中作为接口使用,并且很少有具体的实现,如ArrayBlockingQueue、LinkedList和PriorityQueue。
尽管您也可以使用 LinkedList 或数组来实现 Queue,但使用经过尝试和测试的现有类要好得多。
这不仅可以减少开发时间,还可以降低应用程序的整体代码质量和性能。BlockingQueue 是 Queue 接口的线程安全扩展,可用于在 Java 中实现生产者-消费者模式。
6.设置
Set 是一种特殊的数据结构,它不允许重复。这是一个很好的数据结构来存储唯一元素,如 Id,例如,EmployeeId,OrderId,TradeId 等。每当你存储需要唯一的数据时,你可以使用 Set 数据结构。如果您尝试插入重复项,Set 将不接受它,并且其方法将返回 false 以指示插入失败。
Java Collection API 提供了一些 Set 的实现,例如HashSet、TreeSet 和 LinkedHashSet,这对于大多数情况来说已经绰绰有余了。这些集合,除了初始集合之外,还提供排序和插入顺序。
这就是 Java 开发人员最重要的一些数据结构。除了这些基本的数据结构之外,Java 集合框架中还有很多其他的数据结构,包括 BlockingQueue 和 ConcurrentHashMap 等并发数据结构。对于具有任何经验水平的 Java 开发人员,最好探索 Java 5 和 6 中引入的新集合类,以便更好地使用 Java API。
参考文章: https://medium.com/javarevisited/6-data-structures-every-programmer-should-learn-a24de0f3fc3b
推荐书单
《HTML5+CSS3+JavaScript从入门到精通》
购买链接:https://item.jd.com/12659883.html
《HTML5+CSS3+JavaScript从入门到精通(微视频精编版 套装共2本)/软件开发微视频讲堂》内容浅显易懂,实例丰富,详细介绍了HTML5+CSS3+JavaScript开发需要掌握的各类实战知识。
全书分为两册:核心技术分册和强化训练分册。核心技术分册共17章,包括HTML,基础、文本、图像和超链接、CSS3概述、CSS3高级应用、表格与标签、列表、表单、多媒体、HTML5新特性、JavaScript基础、绘制图形、文件与拖放、JavaScnpt对象编程、响应式网页设计、响应式组件、课程设计——游戏公园等内容。通过学习,读者可快速开发一些中小型应用程序。强化训练分册共15章,通过大量源于实际生活的趣味案例,强化上机实践,拓展和提升软件开发中对实际问题的分析与解决能力。
精彩回顾
扫码关注《Java学研大本营》,加入读者群,分享更多精彩