Java数据结构

数组


数组在内存中占据一段连续的内存空间,大小是固定的。在数组中插入数据,需要移动插入位置后的所有数据,这一特性使得数组对于插入操作并不友好。但数组对于位置的访问是极其友好的,就ArrayList来讲,它支持所谓RandomAccess特性,可以迅速完成基于位置的操作。

所以数组的最大优势是:基于位置的访问(查找时需要对比)。对于支持RandomAccess,迭代会比for循环快。

链表


链表不具备RandomAccess特性,链表是通过指针域来关联数据之间的位置关系,在内存中可以不是连续的地址,这使得链表的访问必须从头开始。而对于插入,删除,只需要操作对应前后的指针,修改指针域即可。

所以链表对查询访问是不太友好的,但对插入删除比较友好。

Hash散列


数组的优势是基于位置的访问,而链表的优势是增删操作。数组和链表在查询时表现一般的原因在于它们并不记得数据的位置,都需要用待查询的数据与存储的数组对比。
而 Hash散列,以key-value的形式存储数据,key****哈希后对应数组的位置,而数组对位置的访问是有优势的,所以这样可以优化对数据的查找(用到了数组的位置访问优势,同时又避免或减少了查找时的对比操作)。

使用 Hash算法来将key转换成int(对应数组下标),每次查找只要Hash一下,就可以取对应位置的value。这就是Hash散列。

但是对Hash算法来说,很难保证不会出现两个不同的key对应同一个int值,这就是所谓的哈希碰撞。对于这种情况,我们可以将value以链表的形式存储。


树(tree)是n个结点的有限集,n为0时则为空树。在任意一棵非空树中:

  1. 有且仅有一个特定的称为根(root)的结点;
  2. 当n>1时,其余结点可分为m(m>0)个互补相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树(subtree)。

有序树:如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。

二叉排序树:它或者是一棵空树,或者具有以下性质:

  • 若它的左子树不为空,则左子树上所有的结点的值均小于它的根结点的值。
  • 若它的右子树不为空,则右子树上所有的结点的值均大于它的根结点的值。
  • 它的左右子树也分别为二叉排序树。
    (二叉排序树,可以看作是一个可二分查找的链表)

平衡二叉树(AVL Tree)
平衡二叉树是在二叉排序树的基础上,解决极端二叉排序树查询效率问题。如1-n的序列,如果以1或n为根结点,那么这个二叉树的层级为n,大大降低二叉排序树的查询效率,而平衡二叉树就是通过旋转的方式,找到合适的根结点,使得平衡因子(二叉树上左子树与右子树的深度之差)为 -1、0和1。

红黑树
红黑树的规则保证了插入、删除操作之后树的平衡,使得查找的最坏负责度都为O(logn)。

  • 根结点永远是黑色的。
  • 每个结点,要么是红色的,要么是黑色的。
  • 所有的 NIL / NULL 结点都是黑色的(都以NIL / NULL结尾)。
  • 每个红色结点的两个子结点一定都是黑色(不会有两个连续的红色结点,可以有连续的两个黑色结点)。
  • 从任一结点到其子树中每个叶子结点的路径都包含相同数量的黑色结点。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容