java中的数据结构

前言

之前遇到一个问题,具体是说: 当我们用HashMap的时候,是怎样考虑优化其性能的呢?当时就一脸懵逼,原来是因为hashmap的自动扩容影响了性能,后面查资料才知道,可以通过设置hashmap的合理的初始容量或者加载因子来优化。 工作了一段时间了,连这个都不知道表示很羞愧。然后就去查看了一些关于数据结构的知识。其实也常常听说数据结构包括链表,队列,栈,树和二叉树,图等。但是在java中具体的应用有哪些呢?抱着一种好奇的心态去整列了一下java中的数据结构。

大概整理如下图
大概结构图

我在开发过程中用的最多的就属hashmap和arrayList。树和二叉树看了很久还是不明所以,后面再逐步修改吧。

线性表

  • linkedList 就是基于双向链表的结构其插入,删除,新增的性能强于arrayList。因为arrayList本质就是数组,其需要的内存空间必须是连续的,所以当需要插入一条数据时,若在末端增加数据,其性能消耗也还好,但是若在任意位置插入就需移动数据的位置。linkedList 需要的内存空间可以不连续,插入数据时只需要改变节点的prev和next的指向就行了。
  • linkedList 随机访问get和set就没有arrayList快了。linkedList需要移动指针。
  • 栈 先进后出,java中vector 是栈的应用,其线程安全,性能差。其实现类是stack类
  • 队列 先进先出,java中的Queue是和List一样继承于collection。上图用链表实现队列的方法是用C语言实现,队列最常见的应用就是异步消息,日志等,如Android中的handler的messageQueue。

hash表(散列表)

java中的Map。其中的实线类有 HashTable,HashMap,WeakHashMap.其中weakhashMap是一种对key 弱引用map。写到这里就想起了hashmap的原理以及hashmap与hashset的区别等,然后可以参看hashmap的原理

  • hashTable 不允许null key和null value,线程安全,单线程操作性能差。 通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。
  • hashmap 允许null key和null value 但是是异步的,所以线程不安全。将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。

树和二叉树

树是一种非线性结构,二叉树为度为2的树形结构,分为左子树和右子树。
二叉树概念以及存储结构--51CTO

  • 叶结点(Leaf):度为0的结点;
  • 路径和路径长度:从结点n1到nk的路径为一个结点序列n1,n2,...,nk。ni是ni+1的父结点。路径所包含边的个数为路径的长度;
  • 结点的层次(Level):规定根结点在1层,其他任一结点的层数是其父结点的层数加1
  • 树的深度(Depth):树中所有结点中的最大层次是这棵树的深度;

图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。在图中的数据元素,我们称之为顶点(Vertex),顶点集合有穷非空。在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。图的详解

树和图都没有接触过,目前还不知道java中的应用。
尝试整理文章,每天进步一丢丢,嘻嘻。

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

推荐阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,413评论 1 14
  • 1. 总体来说 java中主要的集合接口有Collection、Map。Collection有一个父接口,Coll...
    只道初见阅读 1,449评论 0 0
  • collection接口 List接口 ArrayList是数组结构,长度可变,在add的时候,会比较前数组的长度...
    山楂mm阅读 161评论 0 0
  • 一、名词解释 1.隐含的读者 是德国接受美学家伊瑟尔20世纪60年代末提出的一个重要概念,它对主导西方文论界达半个...
    尼采在芝华塔尼欧阅读 2,695评论 2 17
  • 什么是闭包 一种写法 在函数定义处的环境中自带数据 一种为局部定义函数封装信息的方式 参考 闭包热身 普通循环 延...
    coolheadedY阅读 296评论 0 0