zoukankan      html  css  js  c++  java
  • java数据结构

    java常见数据结构

     一、线性表——数据结构中的元素存在一对一的相互关系

    1、数组

    数组是一种存储单元连续,用来存储固定大小元素的线性表。java中对应的集合实现,比如ArrayList。

    特点:查找元素快,增删元素慢,大小固定

    2、链表

    链表又分单链表和双链表,是在物理存储单元上非连续、非顺序的存储结构,

    由一系列结点node(链表中每一个元素称为结点)组成,每个结点包括两个部分:数据域和指针域,
    数据域:存储数据元素的,
    指针域:存储下一个结点地址

    特点:查找元素慢,增删元素快

    数据元素的逻辑顺序是通过链表中的指针链接次序实现的。java中对应的集合实现,比如LinkedList。

    3、栈

    栈是一种运算受限的线性表,特点:先入后出。表的末端叫栈顶,基本操作有push(进栈)和pop(出栈)。java中stack就是简单的栈实现。

    4、队列

    队列也是一种运算受限的线性表,特点:先进先出。表的前端只允许进行删除操作,表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。java中很多Queue的实现,消息中间件的队列本质也是基于此的。

    二、树——非线性结构,数据结构中的元素存在一对多的相互关系。

    1、二叉树:二叉树是每个节点最多有两个子树的树结构。顶上的叫根结点,两边被称作“左子树”和“右子树”。
    结构示意图:

    2、二叉搜索树

    二叉搜索树又叫二叉查找树,又叫二叉排序树。性质如下:(1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 左、右子树也分别为二叉排序树;(4) 没有键值相等的结点。

    3、平衡二叉树

    平衡二叉树又叫AVL树。性质如下:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。

    4、红黑树

     红黑树是一种特殊的平衡二叉树,它保证在最坏情况下基本动态集合操作的事件复杂度为O(log n)。

    红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。

    红黑树的约束:
    1. 节点可以是红色的或者黑色的

    2. 根节点是黑色的

    3. 叶子节点(特指空节点)是黑色的

    4. 每个红色节点的子节点都是黑色的

    5. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

    三、图——非线性结构,数据结构中的元素存在多对多的相互关系。

    四、哈希表——哈希表, 内部通过数组 + 单链表的方式实现. jdk8中引入了红黑树,对长度 > 8的链表进行优化

  • 相关阅读:
    Linux下破解windows密码最终秘籍
    vc编程实现NTFS数据流创建与检测
    C# 登陆 电脑 QQ 发送消息
    一个自创/发明编程语言的想法
    可迭代的前端项目开发规范
    写给那些讨厌微软系的人
    组件化的前端开发流程
    一个java swt桌面程序开发到打包的总结(2)
    一个java swt桌面程序开发到打包的总结(3)
    一个java swt桌面程序开发到打包的总结(1)
  • 原文地址:https://www.cnblogs.com/wenhuang/p/13197405.html
Copyright © 2011-2022 走看看