iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >常用的Java数据结构知识点有哪些
  • 642
分享到

常用的Java数据结构知识点有哪些

2023-06-29 09:06:40 642人浏览 八月长安
摘要

小编给大家分享一下常用的Java数据结构知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 数据结构分类按照线性和非线性可以将Java数据结构分为两大类:①线性数据结构:数组、链表、栈、队列②非线性数据结构:树

小编给大家分享一下常用的Java数据结构知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1. 数据结构分类

按照线性和非线性可以将Java数据结构分为两大类:

①线性数据结构:数组链表、栈、队列
②非线性数据结构:树、堆、散列表、图

2. 线性数据结构

2.1 数组

数组是一种将元素存储于连续内存空间的数据结构,并且要求元素的类型相同。

// 定义一个数组长度为5的数组arrayint[] array = new int[5];// 为数组的元素赋值array[0] = 4;array[1] = 3;array[2] = 2;array[3] = 1;array[4] = 0;

直接赋值:

// 一种方式int[] array = {4, 3, 2, 1, 0};// 另一种方式int[] array = new int[]{4, 3, 2, 1, 0};

2.2 可变数组

可变数组是在一般数组的基础上结合扩容机制进行改进的具有灵活长度的数组。

// 定义一个可变数组List<Integer> changeable_array = new ArrayList<>();// 向可变数组的尾部添加元素array.add(4);array.add(3);array.add(2);array.add(1);array.add(0);

2.3 链表

链表可以定义为一个类,该类的包含两个成员变量的:节点的值val、后继节点的引用next。节点是构成链表的基本单位,这种数据结构在内存空间的存储地址是非连续的。

// 定义链表类class Listnode {    // 节点的值    int val;    // 后继节点的引用    ListNode next;    ListNode(int x){        this. val = x;    }}

构建多个链表类的对象,并构建这些节点实例之间的引用指向:

  • ①节点head的节点值为2,其后继节点是值为1的节点n2。

  • ②节点n2的节点值为1,其后继节点是值为0的节点n3。

  • ③该链表的头节点为head,尾节点为n3。

// 实例化节点ListNode head = new ListNode(2);ListNode n2 = new ListNode(1);ListNode n3 = new ListNode(0);// 构建三个节点之间的引用指向head.next = n2;n2.next = n3;

2.4 栈

栈是一种抽象数据结构,特点是“后进先出”,可由数组或者链表实现。

// 定义一个栈,使用Java的Vector类的子类StackStack<Integer> stack = new Stack<>();

入栈操作 push():

// 元素0入栈stack.push(0);// 元素1入栈stack.push(1);

出栈操作 pop():

// 元素1出栈stack.pop();// 元素0出栈stack.pop();

在Java中可以使用Stack、ArrayDeque、LinkedList实现栈,但通常情况下,不推荐使用Vector类以及其子类Stack,

一般使用LinkedList来实现栈:

LinkedList<Integer> stack = new LinkedList<>();

入栈操作 addLast():

// 元素0入栈stack.addLast(0);// 元素1入栈stack.addLast(1);

出栈操作 removeLast():

// 元素1出栈stack.removeLast();// 元素0入栈stack.removeLast();

2.5 队列

队列是一种抽象数据结构,特点是“先进先出”,可由链表实现。
LinkedList类实现了Queue接口,因此可以把LinkedList当成Queue来用。

Queue<Integer> queue = new LinkedList<>();

入队操作 offer():

// 元素0入队queue.offer(0);// 元素1入队queue.offer(1);

出队操作poll(),该函数的返回值为出队的那个元素:

// 元素0出队queue.poll();// 元素1出队queue.poll();

element():返回第一个元素
peek():返回第一个元素
区别:在队列元素为空的情况下,element() 方法会抛出NoSuchElementException异常,peek() 方法只会返回 null。

queue.offer("a");queue.offer("b");queue.offer("c");queue.offer("d");queue.offer("e");queue.element(); //输出aqueue.peek(); //输出a

3. 非线性数据结构

3.1 树

树是一种非线性的数据结构,可分为二叉树和多叉树。
二叉树可定义为一个类,该类包含三个成员变量:节点值val、左子节点left、右子节点right

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

二叉树各节点实例化:

// 根节点rootTreeNode root = new TreeNode(0);TreeNode n2 = new TreeNode(1);TreeNode n3 = new TreeNode(2);TreeNode n4 = new TreeNode(3);TreeNode n5 = new TreeNode(4);

构建二叉树各节点之间的引用指向:

// 根节点的左子节点为n2,其值为1root.left = n2;// 根节点的右子节点为n3,其值为2root.right = n3;// 节点n2的左子节点为n4,其值为3n2.left = n4;// 节点n2的右子节点为n5,其值为4n2.right = n5;

3.2 图

图是一种非线性数据结构,由顶点(vertex)和边(edge)组成,每条边都连接着两个顶点。
图分为有向图和无向图。

以无向图为例:

  • ①顶点集合: vertices = {1, 2, 3, 4, 5}

  • ②边集合: edges = {(1, 2), (1, 3), (1, 4), (1, 5), (2, 4), (3, 5), (4, 5)}

(1)图的表示方法:邻接矩阵(无向图的邻接矩阵是一个斜对角对称矩阵)
⭐邻接矩阵适用于存储稠密图,即顶点较多、边较少。

// 存储图的顶点int[] vertices = {1, 2, 3, 4, 5};// 存储图的边int[][] edges = {{0, 1, 1, 1, 1},                 {1, 0, 0, 1, 0},                 {1, 0, 0, 0, 1},                 {1, 1, 0, 0, 1},                 {1, 0, 1, 1, 0}};int[] vertices = {1, 2, 3, 4, 5};

(2)图的表示方法:邻接表

⭐邻接表适用于存储稀疏图,即顶点多、边较少。

// 存储图的顶点int[] vertices = {1, 2, 3, 4, 5};// 存储边的集合List<List<Integer>> edges = new ArrayList<>();// edge[i]表示图的顶点i对应的边集合List<Integer> edge_1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4));List<Integer> edge_2 = new ArrayList<>(Arrays.asList(0, 3));List<Integer> edge_3 = new ArrayList<>(Arrays.asList(0, 4));List<Integer> edge_4 = new ArrayList<>(Arrays.asList(0, 1, 4));List<Integer> edge_5 = new ArrayList<>(Arrays.asList(0, 2, 3));edges.add(edge_1);edges.add(edge_2);edges.add(edge_3);edges.add(edge_4);edges.add(edge_5);

3.3 散列表

散列表是一种非线性的数据结构,实质是将键(key)通过Hash函数完成到值(value)的映射。

// 初始化散列表Map<String, Integer> dict = new HashMap<>();

添加键 - 值对:

dict.put("python", 101);dict.put("c", 102);dict.put("java", 103);

通过键 key查找对应的值 value:

dict.get("Python");    // 101dict.get("c");        // 102dict.get("java");    // 103

设计一个简单的Hash函数构建 编程语言 ==> 编号 的映射,构建一个散列表(假设不考虑低碰撞率、高鲁棒性):

String[] program_lang = {"python", "c", "java"};int hash(int idx){    int index = (idx -1 % 100);    return index;}names[hash(101)];    // pythonnames[hash(101)];    // cnames[hash(101)];    // java

3.4 堆

  • (1)堆是一种基于完全二叉树的数据结构,可由数组实现。

  • 完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1 &le; i &le; n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

  • (2)基于堆的原理实现的排序算法称为堆排序。

  • (3)基于堆实现的数据结构称为优先队列。

  • (4)堆分为大顶堆、小顶堆:①大顶堆:任意节点的值不大于其父节点的值,即根节点最大,任意子节点小于等于父节点。②小顶堆:任意节点的值不小于其父节点的值,即根节点最小,任意子节点大于等于父节点。

// 初始化小顶堆,操作为 优先队列Queue<Integer> heap = new PriorityQueue<>();

元素入堆add():

// 元素入堆heap.add(0);heap.add(4);heap.add(2);heap.add(6);heap.add(8);

元素出堆 poll():

// 元素出堆(从小到大)heap.poll(); // -> 0heap.poll(); // -> 2heap.poll(); // -> 4heap.poll(); // -> 6heap.poll(); // -> 8

看完了这篇文章,相信你对“常用的Java数据结构知识点有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 常用的Java数据结构知识点有哪些

本文链接: https://www.lsjlt.com/news/323781.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 常用的Java数据结构知识点有哪些
    小编给大家分享一下常用的Java数据结构知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 数据结构分类按照线性和非线性可以将Java数据结构分为两大类:①线性数据结构:数组、链表、栈、队列②非线性数据结构:树...
    99+
    2023-06-29
  • redis数据结构知识点有哪些
    这篇文章主要介绍“redis数据结构知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis数据结构知识点有哪些”文章能帮助大家解决问题。redis的数...
    99+
    2022-10-19
  • Python3数据结构知识点有哪些
    本篇内容主要讲解“Python3数据结构知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python3数据结构知识点有哪些”吧!数字 Number整型(int) - 通常被称为是整型或...
    99+
    2023-06-29
  • 常用的Java数据结构知识点汇总
    目录1.数据结构分类2.线性数据结构2.1数组2.2可变数组2.3链表2.4栈2.5队列3.非线性数据结构3.1树3.2图3.3散列表3.4堆1. 数据结构分类 按照线性和非线性可以...
    99+
    2022-11-13
  • web前端的数据结构知识点有哪些
    本篇内容介绍了“web前端的数据结构知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)什么叫算法?算法就是计算或解决问题的步骤。...
    99+
    2023-06-27
  • HTML网页结构的知识点有哪些
    本篇内容主要讲解“HTML网页结构的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML网页结构的知识点有哪些”吧!   多时候学网页制作开发的...
    99+
    2022-10-19
  • java常用数据结构有哪些
    Java常用的数据结构有以下几种:1. 数组(Array):一组连续的内存空间,用于存储同类型的数据。2. 链表(Linked Li...
    99+
    2023-08-23
    Java
  • oracle常用数据字典的知识点有哪些
    本篇内容介绍了“oracle常用数据字典的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一数据...
    99+
    2022-10-19
  • Java HotSpot性能引擎的体系结构有哪些知识点
    本篇内容介绍了“Java HotSpot性能引擎的体系结构有哪些知识点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 引言 Java&g...
    99+
    2023-06-03
  • Java数组知识点有哪些
    这篇文章主要介绍“Java数组知识点有哪些”,在日常操作中,相信很多人在Java数组知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数组知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-30
  • CSS常用的知识点有哪些
    这篇文章主要讲解了“CSS常用的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS常用的知识点有哪些”吧!一、width(宽)& he...
    99+
    2022-10-19
  • 常用的JavaScript知识点有哪些
    这篇文章主要介绍“常用的JavaScript知识点有哪些”,在日常操作中,相信很多人在常用的JavaScript知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的JavaScript知识点有哪些...
    99+
    2023-07-05
  • Java中锁的常见知识点有哪些
    本篇文章给大家分享的是有关Java中锁的常见知识点有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。锁的概念可重入锁如果锁具备可重入性,则称作为可重入锁。像synchroni...
    99+
    2023-06-05
  • Java异常体系的知识点有哪些
    这篇文章主要介绍“Java异常体系的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java异常体系的知识点有哪些”文章能帮助大家解决问题。1、体系分类(1)uncheckedexcept...
    99+
    2023-06-30
  • vue常用知识点有哪些
    这篇文章主要介绍“vue常用知识点有哪些”,在日常操作中,相信很多人在vue常用知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue常用知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • Reactive架构的知识点有哪些
    这篇文章主要介绍了Reactive架构的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Reactive架构的知识点有哪些文章都会有所收获,下面我们一起来看看吧。Reactive 和 Reactive...
    99+
    2023-06-05
  • Java中关于异常的知识点有哪些
    本文小编为大家详细介绍“Java中关于异常的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中关于异常的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。3W原则哪都有的3W原则,JA...
    99+
    2023-06-16
  • Java基本数据类型的知识点有哪些
    这篇“Java基本数据类型的知识点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java基本数据类型的知识点有哪些”文...
    99+
    2023-06-27
  • Java的Queue知识点有哪些
    本篇内容主要讲解“Java的Queue知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的Queue知识点有哪些”吧!Java提供了Quere,相当好用,在1.5版本中又有增强。...
    99+
    2023-06-03
  • Java NIO的知识点有哪些
    今天小编给大家分享一下Java NIO的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。No-Block 和Blo...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作