1. java中数据结构。

数据结构,就是对在内存中的数据的一种安排。java中的数据结构就是对在java内存中的数据的一种安排。java中常用的数据结构有list, set, map等。java中数据结构主要分为两大类,一类是存储单值的collection.另外一类是存储key-value的map.

collection 接口,collection 接口中主要是list 和set. 其他的数据结构都是由这两个接口衍生出来的。Map接口,map的主要实现类有hashMap,treeMap和hashTable。具体结构如下:

2. java中对于数据结构的支持。

ArrayList,其底层是使用数组来实现的,所以该数据结构查找速度与其他list比较而言相对较快,

private transient Object[] elementData;

LinkedList, 其底层是使用链表来实现的,LinkedList的类里面只声明head和tail两个变量。同过这两个变量可以遍历到list里面的所有的值。正因为有这样的实现,所以查找速度比较慢。但是由于插入新的数据的时候,只需更改链表前后相关元素,所以插入和删除速度较快。

private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}
/*** Pointer to first node.* Invariant: (first == null && last == null) ||*            (first.prev == null && first.item != null)*/transient Node<E> first;/*** Pointer to last node.* Invariant: (first == null && last == null) ||*            (last.next == null && last.item != null)*/transient Node<E> last;

Vector,  vector的实现跟ArrayList一样,只不过是vector是线程安全的,也就是说在ArrayList的一些方法加上了synchronized关键字。

 public synchronized E get(int index) {if (index >= elementCount)throw new ArrayIndexOutOfBoundsException(index);return elementData(index);}

如果要使用线程安全的ArrayList,还有另外一种办法可以考虑,使用collections类:

  List ls=Collections.synchronizedList(new ArrayList());

Stack, Stack是vector的子类,也就是说,stack具有vector的所有方法之外又多了一些stack特有的方法,push,pop和peek。

  public synchronized E peek() {int     len = size();if (len == 0)throw new EmptyStackException();return elementAt(len - 1);}

Queue, java中的queue又细分为blockingqueue和deque,deque就是双向队列。blockingqueue就是当存储和查询条件不满足的时候,进入阻塞状态,直到满足操作条件为止。

Blockingqueue 的实现类主要有ArrayBlockingQueue和linkedBlockingQueue。正如其名称一样,ArrayBlockingQueue和ArrayList的底层实现一样,都是用数组来实现的,LinkedBlockingQueuehe 和LinkedList的底层实现一样。

ArrayBlockingQueue

  /** The queued items */final Object[] items;
 public E take() throws InterruptedException {final ReentrantLock lock = this.lock;lock.lockInterruptibly();try {while (count == 0)notEmpty.await();return extract();} finally {lock.unlock();}}

LinkedBlockingQueue

static class Node<E> {E item;/*** One of:* - the real successor Node* - this Node, meaning the successor is head.next* - null, meaning there is no successor (this is the last node)*/Node<E> next;Node(E x) { item = x; }}

Dequeue也比较类似,Deque的实现类有Array和linked,不过,java里面没有linkedDeque,而是linkedList,

关于Set和map的实现将在下一篇文章中讨论。

2015年2月27日相关推荐

  1. 2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!...

    ---恢复内容开始--- 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码: [code=c] #i ...

  2. 2015年11月27日 野外生存(一)刀

    序,看了贝尔野外求生系列节目很多期,对贝尔的求生技能钦佩不已,也羡慕他可以亲切接触大自然...准备野外生存第一位的应该是拥有一把趁手的兵器-刀,可以砍竹子,劈木头,切割绳子等,因此如何选择一把好刀,是 ...

  3. 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]

    Azure是微软的云平台,不仅支持Windows服务器,也深爱着开源世界.通过与开源社区之间的合作, Azure支持了大量的开源软件和框架,涵盖了包括Linux 服务器,Docker, chef, M ...

  4. 梦幻手游服务器维护摆摊公示时间,梦幻西游手游5月27日维护公告

    立即下载 5.0 精品力作 梦幻西游 大小:563.32M 小编点评:<梦幻西游>网易手游史诗级巨作,西游梦,新征程!2016年是"梦幻西游"全面布局的一年,梦幻西游品 ...

  5. 始于2015年11月23日,终于2018年08月08日

    留念. 2015年11月23日:在一起 2016年01月17日-21日:北京机场,我们❤ 2016年04月16日:去他所在城市--成都 2016年06月04-06日:第一次小旅游--都江堰.青城山 2 ...

  6. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn

    实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...

  7. 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16

    解析:此题手算或者用excel很快,这里我用代码代码量较大但思路简单. 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之 ...

  8. 2012年10月27日沈阳WebLogicFans论坛User Group线下活动

    沈阳User Group成立活动WebLogicFans论坛沈阳线下活动 值此金秋十月,在WebLogicFans论坛的支持下,东北地区终于有了第一个属于甲骨文用户和技术爱好者自己的技术社区-沈阳 U ...

  9. 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)(2015年11月17日20:51:59)

    本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定 ...

最新文章

  1. DevExpress的TextEdit限制输入内容的格式,比如只能输入数字
  2. C++实现对链表的选择排序算法(附完整源码)
  3. JavaScript:动态选中CheckBox
  4. kotlin学习笔记——过程控制和Range表达式
  5. IdentityServer4-前后端分离的授权验证(六)
  6. 聚水潭是如何基于AnalyticDB for PostgreSQL 构筑海量实时数仓平台的
  7. Jenkins 与 Kubernetes 的 CI 与 CD Git + Maven + Docker+Kubectl
  8. 记AELF区块链网络的一次内存持续增长问题排查
  9. Linux网络实时流量监测工具iftop的安装使用
  10. AIR文件上传与文件断点续传方式下载
  11. Starling自适应设备大小的做法
  12. 【图解深度学习】【章节:2-1.1 | 什么是机器学习?】连小学生都能看懂的深度学习基础总结
  13. mysql知识思维导图
  14. perl中tr的用法
  15. 秦汉考场科目三路线图_秦汉科目三考场考试攻略,附考场路线图
  16. Fuchsia - 编译及运行
  17. 常见的行业认证和资质清单介绍
  18. 中基鸿业什么是净值型理财产品
  19. CSS3理解position属性
  20. CSS 画一个圆的背景 样式

热门文章

  1. matlab 房子,买房子采光真的很重要吗?
  2. 引擎开发日志:集成Bullet3物理引擎
  3. 学习技巧以及学习方法的总结
  4. python键盘输入字符串以空格为分隔符_已知str1=“ You need Python” , 以空格为分隔符,分割此此字符串,然后用“ @” 为连接符,将其连接起来()。_学小易找答案...
  5. html设置页面大小始终100%,css width 100% 宽度百分之百设置与不设置
  6. 从栅格图导出矢量面图
  7. Monit的编译(交叉编译)及使用
  8. 星巴克中国2021秋日限定系列上市;雅诗兰黛、爱茉莉太平洋“剧透”第四届进博会参展亮点 | 知消...
  9. SpringBoot前后端分离参数传递方式总结
  10. 第八次(datetime模块)