精华内容
下载资源
问答
  • 集合结构:除了同属于一类型外,别无其它关系 线性结构:元素之间存在一对一关系常见类型: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可数据结构分为哪几?详细一点~~数据结构分为数据的逻辑结构、...

    数据元素相互之间的关系称为结构。 有四类基本结构:集合、线性结构、树形结构、图状结构; 集合结构:除了同属于一种类型外,别无其它关系 线性结构:元素之间存在一对一关系常见类型有: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可

    数据结构分为哪几种?详细一点~~

    数据结构分为数据的逻辑结构、数据的物理结构、数据的存储结构

    81e39734bf9fbf86c5cdecfa2c934ada.png

    数据的逻辑结构,指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。

    上次看到一本书,上面写到数据结构,我想了解一下什么是数据结构.

    根据数据元素间关系的不同特性,将数据结构常分为下列四类基本的结构: ⑴集合结构。该结构的数据元素间的关系是“属于同一个集合”。 ⑵线性结构。该结构的数据元素之间存在着一对一的关系。 ⑶树型结构。该结构的数据元素之间存在着一对多的关系。

    有三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。概念数据模型主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等;逻辑数据模型

    目前最常用的三种数据模型及其特点是什么?

    目前最常用的三种数据模型为层次模型、网状模型和关系模型。 一、层次模型 层次模型将数据组织成一对多关系的结构,层次结构采用关键字来访问其中每一层次的每一部分。 层次模型发展最早,它以树结构为基本结构,典型代表是IMS模型。

    数据的逻辑结构可以分为线性结构和非线性结构 线性结构可以分为一般线性表,受限线性表,推广线性表; 受限线性表又可以分为栈,队列,串; 推广线性表又可以分为数组和广义表; 非线性结构可以分为集合,树形结构。

    每种数据结构都具备三种基本运算吗

    每种数据结构都具备三种基本运算吗 是哪三种 急 在线等 满意的话加分

    三种基本运算是:插入、删除和查找,但并不是每种都符合。

    数据结构有几种结构类型,分别是什么

    如果指的是逻辑结构,分为4种:集合、线性、树形、图形 如果指的是物理结构(也叫做存储结构)。

    【数据结构】每种结构都具备三个基本运算:插入、【数据结构】每种结构都具备三个基本运算:插入、删除和查找,这种说法一般而言,并不是所有的数据结构都有这三种基本运算 比如多维数组,就没有插入和删除,可以看看,哪怕是二维数组,如果删除其中某个元素,用行还是列来顶替?顶替后,二维数组不就出现缺口了?。 再比如说栈和队列。

    线性表、堆栈、队列这三种数据结构有什么相同和不栈和队列是受限制的线性表 栈是先进后出(一群人走进了死胡同,然后再都出来) 队列是先进先出(跟排队一个道理,先来的先受到服务) 线性表是哪里都可以进行插入和删除

    展开全文
  • 数据结构:八大数据结构分类

    万次阅读 多人点赞 2018-09-05 18:23:28
    常用数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1、数组 数组是可以再内存中连续存储多个元素的...

    本文目录:

    数据结构分类

    数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。
    常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:
    这里写图片描述
    每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。

    1、数组

    数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。

    int[] data = new int[100];data[0]  = 1;
    

    优点:
    1、按照索引查询元素速度快
    2、按照索引遍历数组方便

    缺点:
    1、数组的大小固定后就无法扩容了
    2、数组只能存储一种类型的数据
    3、添加,删除的操作慢,因为要移动其他的元素。

    适用场景:
    频繁查询,对存储空间要求不大,很少增加和删除的情况。

    2、栈

    栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
    这里写图片描述
    栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

    3、队列

    队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:
    这里写图片描述
    使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

    4、链表

    链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
    这里写图片描述
    链表的优点:
    链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
    添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;

    缺点:
    因为含有大量的指针域,占用空间较大;
    查找元素需要遍历链表来查找,非常耗时。

    适用场景:
    数据量较小,需要频繁增加,删除操作的场景

    5、树

    是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

    • 每个节点有零个或多个子节点;
    • 没有父节点的节点称为根节点;
    • 每一个非根节点有且只有一个父节点;
    • 除了根节点外,每个子节点可以分为多个不相交的子树;

    在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树
    这里写图片描述
    二叉树是树的特殊一种,具有如下特点:

    1、每个结点最多有两颗子树,结点的度最大为2。
    2、左子树和右子树是有顺序的,次序不能颠倒。
    3、即使某结点只有一个子树,也要区分左右子树。

    二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

    扩展:
    二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。这些二叉树的功能强大,但算法上比较复杂,想学习的话还是需要花时间去深入的。

    6、散列表

    散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    记录的存储位置=f(key)

    这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

    哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构,其示例图如下:
    这里写图片描述
    从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

    哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

    7、堆

    堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

    • 堆中某个节点的值总是不大于或不小于其父节点的值;

    • 堆总是一棵完全二叉树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

    堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
    (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),满足前者的表达式的成为小顶堆,满足后者表达式的为大顶堆,这两者的结构图可以用完全二叉树排列出来,示例图如下:
    这里写图片描述
    因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

    8、图

    图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

    按照顶点指向的方向可分为无向图和有向图:
    这里写图片描述
    这里写图片描述
    图是一种比较复杂的数据结构,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构,这里不做展开,读者有兴趣可以自己学习深入。

    展开全文
  • 数据结构分类及八种常见数据结构

    千次阅读 2020-05-09 11:04:00
    3.树形结构:数据结构中的元素存在一对多的相互关系; 4.图形结构:数据结构中的元素存在多对多的相互关系。 数据的存储结构: 顺序存储结构:数据元素在内存中的物理存储顺序与他们的逻辑顺序相同 链式存储结构:...

    一.数据结构分类
    数据的逻辑结构
    1.集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
    2.线性结构:数据结构中的元素存在一对一的相互关系;
    3.树形结构:数据结构中的元素存在一对多的相互关系;
    4.图形结构:数据结构中的元素存在多对多的相互关系。

    数据的存储结构:
    顺序存储结构:数据元素在内存中的物理存储顺序与他们的逻辑顺序相同
    链式存储结构:使用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,数据元素之间的关系需要采用附加信息特别指定。c语言采用指针,Java采用引用指定。

    线性结构和非线性结构两类
    线性结构:最多只有一个直接前趋结点(第一个没有)和一个直接后继结点。栈、队列和串等都属于线性结构
    非线性结构:可能有多个直接前趋结点和多个直接后继结点,数组、广义表、树结构和图

    数据结构分类
    数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。
    常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:
    在这里插入图片描述
    每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。

    二.八种常见数据结构
    1、数组
    数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。

    int[] data = new int[100];data[0] = 1;
    1
    2
    优点:
    1、按照索引查询元素速度快
    2、按照索引遍历数组方便

    缺点:
    1、数组的大小固定后就无法扩容了
    2、数组只能存储一种类型的数据
    3、添加,删除的操作慢,因为要移动其他的元素。

    适用场景:
    频繁查询,对存储空间要求不大,很少增加和删除的情况。

    2、栈
    栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
    在这里插入图片描述
    栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

    3、队列
    队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:
    在这里插入图片描述
    使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

    4、链表
    链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
    在这里插入图片描述
    链表的优点:
    链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
    添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;

    缺点:
    因为含有大量的指针域,占用空间较大;
    查找元素需要遍历链表来查找,非常耗时。

    适用场景:
    数据量较小,需要频繁增加,删除操作的场景

    5、树
    树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

    每个节点有零个或多个子节点;
    没有父节点的节点称为根节点;
    每一个非根节点有且只有一个父节点;
    除了根节点外,每个子节点可以分为多个不相交的子树;
    在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树。
    在这里插入图片描述
    二叉树是树的特殊一种,具有如下特点:

    1、每个结点最多有两颗子树,结点的度最大为2。
    2、左子树和右子树是有顺序的,次序不能颠倒。
    3、即使某结点只有一个子树,也要区分左右子树。

    二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

    红黑树,是在JDK1.8之后在HashMap中数据结构的升级
    一种树结构如 98(节点:存贮着key,value)
    78 125
    51 89 118 169

    右边值大于中间值,中间值大于左边值,当条件查询查询key为125的值时,如果不加索引那么将进行6次磁盘I/O,如果添加索引将只要进行2次磁盘I/O.
    查询流程: 直接从key为98的值根元素开始查询(1次磁盘I/O),发现125大于98向右边查询找到125(2次磁盘I/O).
    不足:但如果数据量太大树的高度还是很高

    BTree(mysql)
    与红黑树一样但是在其每个节点中存储着多个key,value,当查询某条数据时会将这个节点所有的key,value都读取到内存中RAM,在RAM在找出对应的key(RAM中处理的非常快,时间可以忽略不计)
    78 118
    51 89 98 125 169
    78和118为一个节点,51为一个节点,89和98为一个节点,125和169为一个节点.
    当查询169时只有2次磁盘I/O,第一次磁盘I/O找到78个118,第二次磁盘I/O找到125和169这个节点,然后将这个节点读取到内存中处理.

    B+Tree
    B+Tree是BTree的改进版在节点与节点之间多了一个指针,只在树叶(树末梢)有value但这个value将不再是地址指针而是直接存放数据,上一个节点的key将遗留到下一个节点中.目的为了便于范围查询,如查询>98的记录,没有这个指针,需要重新从根节点找,没有这个遗留的节点,因为一次磁盘I/O不能读取太多数据
    78 118 (只有key)
    51 ->78 89 98 ->118 125 169 (都有key,data)

    存储引擎针对与表,一个数据库可以有两个不同存储引擎的表
    MyISAM (BTree)
    数据库文件下,data下的表文件夹中
    frm文件:存储的是建表结构,即查看表对象中的内容,create… 主外键
    MYD(MyISAM Data)文件:存储的是表中的数据
    MYI(MyISAM Index)文件:存储的是表中的key和数据地址指针(即BTree)
    当在数据库中查询时,如果发现有磁盘中有MYI文件(即添加了索引),会在索引中找到对应的节点,根据value的值(地址指针),去MYD文件中找到对应的地址

    InnoDB (B+Tree)
    数据库文件下,data下的表文件夹中
    frm文件:存储的是建表结构,即查看表对象中的内容,create… 主外键
    idb文件(index data):存储的是key和数据(B+Tree)

    非聚集索引,将索引与数据分开,即用MYI和MYD分开(MyISAM)
    聚集索引,将索引与数据结合在一起,即使用idb文件把索引与数据结合(InnoDB)

    mysql读取数据流程:cpu->RAM>磁盘
    页/4K(4*1024B(字节)) 一次磁盘I/O只能读取正数页,一次性不能读取太多数据,所以一个节点不能存放太多数据
    查看mysql文件页大小:show global status like ‘Innodb_page_size’ (官方默认16K)

    6、散列表
    散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    记录的存储位置=f(key)

    这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

    哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构,其示例图如下:
    在这里插入图片描述
    从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

    哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

    7、堆
    堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

    堆中某个节点的值总是不大于或不小于其父节点的值;

    堆总是一棵完全二叉树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

    堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
    (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),满足前者的表达式的成为小顶堆,满足后者表达式的为大顶堆,这两者的结构图可以用完全二叉树排列出来,示例图如下:
    在这里插入图片描述
    因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

    8、图
    图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

    按照顶点指向的方向可分为无向图和有向图:
    在这里插入图片描述
    在这里插入图片描述
    图是一种比较复杂的数据结构,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构,这里不做展开,读者有兴趣可以自己学习深入。

    原文链接:https://blog.csdn.net/yeyazhishang/article/details/82353846

    展开全文
  • java 中几种常用数据结构

    万次阅读 多人点赞 2016-07-11 09:11:27
    java中种常用数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要的关系(继承关系): (----详细参见java...

    JAVA中常用的数据结构(java.util. 中)

    java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要的关系(继承关系)有:  (----详细参见java api文档!)

    Collection---->Collections                                                                                                          Map----->SortedMap------>TreeMap

    Collection---->List----->(Vector \ ArryList \ LinkedList)                                                          Map------>HashMap

    Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)

    --------------Collection----------------

    1、Collections

        API----This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, "wrappers", which return a new collection backed by a specified collection, and a few other odds and ends.

    The methods of this class all throw a NullPointerException if the collections or class objects provided to them are null. 

    2、List

        API----This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, "wrappers", which return a new collection backed by a specified collection, and a few other odds and ends.

    The methods of this class all throw a NullPointerException if the collections or class objects provided to them are null. 

    List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。

    3、Vector

         API----The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of aVector can grow or shrink as needed to accommodate adding and removing items after theVector has been created. 

    基于数组(Array)的List,其实就是封装了数组所不具备的一些功能方便我们使用,所以它难易避免数组的限制,同时性能也不可能超越数组。所以,在可能的情况下,我们要多运用数组。另外很重要的一点就是Vector是线程同步的(sychronized)的,这也是Vector和ArrayList 的一个的重要区别。 

    4、ArrayList

         API----Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)

    同Vector一样是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

    5、LinkedList

         API----Linked list implementation of the List interface. Implements all optional list operations, and permits all elements (including null). In addition to implementing the List interface, the LinkedList class provides uniformly named methods to get, remove and insert an element at the beginning and end of the list. These operations allow linked lists to be used as a stack, queue, or double-ended queue

    LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。 
    它每一个节点(Node)都包含两方面的内容: 
    1.节点本身的数据(data); 
    2.下一个节点的信息(nextNode)。 
    所以当对LinkedList做添加,删除动作的时候就不用像基于数组的ArrayList一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了,这是LinkedList的优势。

    List总结:

    • 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]
    • 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]
    • 所有的List中可以有null元素,例如[ tom,null,1 ]
         基于Array的List(Vector,ArrayList)适合查询,而LinkedList 适合添加,删除操作

    6、Set(接口)

         API-----A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction. 
    Set是不包含重复元素的Collection

    7、HashSet

       API-----This class implements theSet interface, backed by a hash table (actually aHashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits thenull element. 

    虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在 HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看 HashSet的add(Object obj)方法的实现就可以一目了然了。

    8、LinkedHashSet

        API----Linked list implementation of the List interface. Implements all optional list operations, and permits all elements (includingnull). In addition to implementing theList interface, the LinkedList class provides uniformly named methods toget, remove andinsert an element at the beginning and end of the list. These operations allow linked lists to be used as a stack,queue, ordouble-ended queue
    HashSet的一个子类,一个链表。

    9、SortedSet

       API---ASet that further provides atotal ordering on its elements. The elements are ordered using theirnatural ordering, or by aComparator typically provided at sorted set creation time. The set's iterator will traverse the set in ascending element order. Several additional operations are provided to take advantage of the ordering. (This interface is the set analogue ofSortedMap.)  

    有序的Set,通过SortedMap来实现的。

    Set总结:

    (1)Set实现的基础是Map(HashMap)(2)Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象

    -------------Map-----------------

    Map 是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个 Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求,你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。

    1、HashMap

       API----Hash table based implementation of theMap interface. This implementation provides all of the optional map operations, and permitsnull values and the null key. (The HashMap class is roughly equivalent toHashtable, except that it is unsynchronized and permits nulls.) This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.  

    2、TreeMap

       API----A Red-Black tree basedNavigableMap implementation. The map is sorted according to thenatural ordering of its keys, or by aComparator provided at map creation time, depending on which constructor is used. 
    TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。 
    键和值的关联很简单,用put(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。 

    ------------说明-----------

    一、几个常用类的区别 
    1.ArrayList: 元素单个,效率高,多用于查询 
    2.Vector: 元素单个,线程安全,多用于查询 
    3.LinkedList:元素单个,多用于插入和删除 
    4.HashMap: 元素成对,元素可为空 
    5.HashTable: 元素成对,线程安全,元素不可为空 
    二、Vector、ArrayList和LinkedList 
    大多数情况下,从性能上来说ArrayList最好,但是当集合内的元素需要频繁插入、删除时LinkedList会有比较好的表现,但是它们三个性能都比不上数组,另外Vector是线程同步的。所以: 
    如果能用数组的时候(元素类型固定,数组长度固定),请尽量使用数组来代替List; 
    如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList; 
    如果在多线程条件下使用,可以考虑Vector; 
    如果需要频繁地删除插入,LinkedList就有了用武之地; 
    如果你什么都不知道,用ArrayList没错。 
    三、Collections和Arrays 
    在 Java集合类框架里有两个类叫做Collections(注意,不是Collection!)和Arrays,这是JCF里面功能强大的工具,但初学者往往会忽视。按JCF文档的说法,这两个类提供了封装器实现(Wrapper Implementations)、数据结构算法和数组相关的应用。 
    想必大家不会忘记上面谈到的“折半查找”、“排序”等经典算法吧,Collections类提供了丰富的静态方法帮助我们轻松完成这些在数据结构课上烦人的工作: 
    binarySearch:折半查找。 
    sort:排序,这里是一种类似于快速排序的方法,效率仍然是O(n * log n),但却是一种稳定的排序方法。 
    reverse:将线性表进行逆序操作,这个可是从前数据结构的经典考题哦! 
    rotate:以某个元素为轴心将线性表“旋转”。 
    swap:交换一个线性表中两个元素的位置。 
    …… 
    Collections还有一个重要功能就是“封装器”(Wrapper),它提供了一些方法可以把一个集合转换成一个特殊的集合,如下: 
    unmodifiableXXX:转换成只读集合,这里XXX代表六种基本集合接口:Collection、List、Map、Set、SortedMap和SortedSet。如果你对只读集合进行插入删除操作,将会抛出UnsupportedOperationException异常。 
    synchronizedXXX:转换成同步集合。 
    singleton:创建一个仅有一个元素的集合,这里singleton生成的是单元素Set, 
    singletonList和singletonMap分别生成单元素的List和Map。 
    空集:由Collections的静态属性EMPTY_SET、EMPTY_LIST和EMPTY_MAP表示。 


    展开全文
  • 数据结构是一门研究非数值计算的程序设 计问题中计算机的操作对家以及它们之间 的关系和操作的学科 2.数据结构研究数据的逻辑结构存储结构 及数据的运算与实现数据项是数据 不可分割的最小单 3.通常设计一个好的算法...
  • 快速介绍8种常用数据结构 数据结构是一特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件...
  • 通过上节我们知道,数据结构是学习数据存储方式的一门学科,那么,数据存储方式哪几呢?本节将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几存储结构: 线性表,还可细分为顺序表、链表、栈...
  • 数据结构常用数据结构

    千次阅读 2019-06-27 15:37:00
    基本数据结构 首先了解个概念 ...数据结构:是数据元素相互之间存在的一或多种特定关系的集合.主要研究数据逻辑结构和存储结构及其运算的实现 数据的逻辑结构:结构定义中的“关系” 描述...
  • 数据结构基础概念篇

    万次阅读 多人点赞 2017-11-14 13:44:24
    数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。数据:所有能被输入到计算机中,且能被计算机处理的...
  • 数据结构在实际应用中非常常见,现在各种算法基本都牵涉到数据结构,因此,掌握数据结构算是软件工程师的必备技能。 一、什么是数据结构 数据结构,直白地理解,就是研究数据的存储方式。 我们知道,数据存储只有一...
  • Redis 五种常见数据结构:zset

    千次阅读 2019-02-19 17:20:22
    Redis 五种常见数据结构:zset
  • 最近在学习数据结构必要对自己这两天的学习做一个总结,今天就来总结下,数据结构的逻辑结构 按照分类标准的不同,我们把数据结构分为逻辑机构和存储结构,今天主要讲解逻辑结构 逻辑结构:是指数据对象中的...
  • 数据结构与算法】常见数据结构及基本操作

    万次阅读 多人点赞 2019-06-16 21:42:44
    数据结构与算法常见概念2.数据逻辑结构2.1线性结构2.2树形结构2.3图形结构2.4集合结构3.排序算法冒泡排序简单选择排序直接插入排序希尔排序堆排序归并排序快速排序4.查找算法顺序表查找有序表查找线性索引查找二叉...
  • 一、数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括: 集合 数据结构中的元素之间除了“同属一个...
  • 数据结构与算法学习笔记

    万次阅读 多人点赞 2018-09-25 13:55:49
    本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏。...最常用数据结构预算法: 数据结构:数组、链表、栈、队列、散列表、二叉树‘、堆、跳表、图、Tire树 算法: 递归...
  • 图解!24张图彻底弄懂九大常见数据结构

    万次阅读 多人点赞 2020-05-24 22:23:36
    ​数据结构想必大家都不会陌生,对于一个...数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。 本文提纲: 1数组 数组可以说是最基本最...
  • 常用数据结构与常用算法,

    万次阅读 多人点赞 2018-08-08 20:32:54
    1. 常见数据结构 人们进行程序设计时通常关注两个重要问题,一是如何将待处理的数据存储到计算机内存中,即数据表示;二是设计算法操作这些数据,即数据处理。数据表示的本质是数据结构设计,数据处理的本质是算法...
  • 常用数据结构有哪些

    千次阅读 2018-12-07 13:27:18
    (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的:数组、栈、队列和线性表。 (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关...
  • 面试-8 常用数据结构总结

    千次阅读 2018-12-12 11:52:54
    很多代码面试题都要求候选者深入理解数据结构,不管你来自大学计算机专业还是编程培训机构,也不管你多少年编程经验。有时面试题会直接提到数据结构,比如“给我实现一个二叉树”,然而有时则不那么明显,比如...
  • 常见数据结构与算法整理总结(上)

    万次阅读 多人点赞 2018-08-06 18:23:14
    下面是自己整理的常用数据结构与算法相关内容,如错误,欢迎指出。 为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几数据结构,线性表、栈、队列等都提供了较好的实现,就是...
  • 常见数据结构优缺点比较

    千次阅读 2017-12-11 11:17:08
    数据结构是对在计算机内存中的数据的一安排,数据结构包括数组,链表,栈,二叉树,哈希表等等,数据结构和技术与如何处理现实世界数据存储问题项链,现实世界数据指的是那些描述处于计算机外部的物理实体的数据。...
  • 数据结构 Hash表(哈希表)

    万次阅读 多人点赞 2018-05-20 01:23:34
    参考链接:数据结构(严蔚敏) 什么是Hash表 要想知道什么是哈希表,那得先了解哈希函数 哈希函数 对比之前博客讨论的二叉排序树 二叉平衡树 红黑树 B B+树,它们的查找都是先从根节点进行查找,从节点取出...
  • 数据结构:是指相互之间存在一或多种特定关系的数据元素的集合用计算机存储、组织数据的方式。数据结构分别为逻辑结构、(存储)物理结构和数据的运算个部分。 为什么要学数据结构? 首先,因为数据结构作为...
  • Java常用数据结构总结

    万次阅读 2017-02-16 17:04:25
    线性结构:元素之间存在一对一关系常见类型: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插入,删除操作. 树形结构:元素...
  • 一篇文章讲清python开发必懂的8种数据结构

    千次阅读 多人点赞 2021-08-05 09:08:57
    出于这个原因,大多数顶级公司都要求对数据结构有很深的理解,并在编码面试中对其进行深入的考察。 下面是我们今天要讲的内容: 什么是数据结构? 在Python中数组 队列在Python中 栈在Python中 Python中的链表 Python...
  • 数据结构

    万次阅读 2018-02-07 00:47:38
    1. 什么是数据结构算法+数据结构=程序设计 数据结构是由数据和结构两方面组成,下面举一个例子可以让大家很快地理解数据结构:比如我们实验楼的课程管理系统,每一门课程由课程号、课程名、类别、作者等组成,每门...
  • 什么是数据结构

    千次阅读 2019-06-19 20:25:39
    数据结构是指相互之间存在一或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 定义 名词定义 数据结构是指...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 596,079
精华内容 238,431
关键字:

常见的数据结构有三种它们是

数据结构 订阅