先上答案:HashTable (哈希表)不是顺序表。

分析如下:

要搞清楚这个问题需要明确两个问题:

1. 什么是顺序表

2. 哈希表的数据结构

先说什么是顺序表。WIKI的解释是:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。

简而言之,顺序表就是用数组作为底层存储的数据结构,和链表相对。在Java中ArrayList就是一个顺序表。而LinkedList就是一个链表。

顺序表的特点是:表长度等于底层数组的长度,插入新元素的位置为前一元素位置+1.

那么HashTable是以数组作为底层存储结构的嘛?这就涉及到第二个问题:哈希表的数据结构。

乍一看确实,HashTable最重要的成员变量就是一个叫table的数组。但是仔细看就会发现这个数组的每个元素是一个Entry 对象。那么什么是Entry?

注意Entry的next成员变量:这表明Entry是一个链表的节点,每个Entry都包含自己下一节点的引用。

如果我们再仔细阅读put(key, value) 方法就会发现,当往HashTable插入元素( pair)时HashTable会首先把新元素wrap成一个Entry object,然后根据Key的哈希值选择table数组的某一位置插入Entry 对象,如果那个位置已经有Entry对象了(即:哈希碰撞),则把新的Entry object添加到旧的Entry的后面成为链表中的新节点。

所以逻辑上,HashTable只是用数组最为哈希桶,而每个桶里存储的是一个链表。哈希表的长度显然不等于table数组的长度而是每个链表的长度的总和。哈希表插入元素也是非顺序的(不是按数组下标依次插入的,插入的元素也无法按照数组下标检索)。

话说回来,有没有实现迭代器Iterator并不能作为是不是顺序表的判断标准。

java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...相关推荐

  1. java util 排序_Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  2. java hashtable 数据结构_java数据结构——哈希表(HashTable)

    哈希表提供了快速的插入操作和查找操作,每一个元素是一个key-value对,其基于数组来实现. 一.Java中HashMap与Hashtable的区别: HashMap可以接受null键值和值,而Ha ...

  3. java合并排序_Java中的合并排序算法

    合并排序算法是一种分而治之的算法.在分而治之的范式中,一个问题被分解成较小的问题,其中每个小问题仍然保留着大问题的所有属性--大小除外.为了解决原始问题,每个部分都是单独解决的,然后这些部分又合并在一 ...

  4. java自然排序_Java中的自然排序顺序字符串比较 - 是内置的吗?

    String实现了Comparable,这就是Java中的自然顺序(使用类似的接口进行比较).您可以将字符串放在TreeSet中,也可以使用Collections或Arrays类进行排序. 但是,在您 ...

  5. java线程排序_Java中的并发排序

    我目前正在开发一个程序来同时对字符串进行排序.我的程序接收一个文件,将文件的每一行读入一个数组,并将字符串数组拆分成较小的字符串数组.然后,程序为每个较小的数组启动一个线程,并对它们进行快速排序.每个 ...

  6. java list 排序_Java中List的排序

    场景 Bean定义如下,仅有一个类型为Integer的age字段. @NoArgsConstructor @AllArgsConstructor(staticName = "of" ...

  7. java自动排序_java中的自动排序集合 ---- 20160809

    TreeSet的实现: TreeMap实现: 需要注意: 1. 当利用comparator比较两个元素相等时,插入的时候会失败.而hashset是发现两个元素相等(即:两个元素的hashcode相同, ...

  8. java单词排序_java中实现将输入的单词按首字母排序

    问题: 对给出的一系列英文单词按首字母进行排序,并输出排序后的结果. 在String中这样一个方法compareToIgnoreCase()它是忽略大小写的比较两个单词在字典中的顺序.通过使用这个方法 ...

  9. java keyset 排序_JAVA中KEYSET()返回值的排序问题

    上回说到,由于对数据进行处理的时候是按照乱序一行一行的处理,导致并行线程各自占据了一部分数据,谁也不肯释放,从而发生死锁. 为什么会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet ...

最新文章

  1. SQLALchemy之Python连接MySQL
  2. 7能进安全模式但正常启动黑屏_电脑进入系统后黑屏怎么解决
  3. 学习笔记27—python中numpy.ravel() 和 flatten()函数
  4. 不使用物理引擎实现防止群聚行为敌人扎堆
  5. 你真的了解Java中的三目运算符吗
  6. tomcat6的项目能直接在tomcat7上用吗_极尽人性化的设计: 能“隐形”的笔记本电脑支架...
  7. VC编写和调用DLL的简单例子
  8. Tomcat6.0配置集合
  9. 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 1)
  10. ElementUI之el-input输入不进去解决办法
  11. Pytorch系列(六):猫狗大战3-MobileNet_V1V2
  12. LCD1602液晶屏
  13. 推荐一部非常精彩的小说
  14. 如何把多张图片合成视频
  15. Python数据分析-绘图-3-Bokeh交互式绘图-1-基本构成与语法
  16. airflow使用macros
  17. 如何判断服务器是否被黑
  18. ETH may face a big rise because of this news
  19. 硬件工程师必须要知道的“英文缩写”
  20. maven无法找到idk中的类

热门文章

  1. Leetcode 295. 数据流的中位数
  2. JAVA遇见HTML——JSP篇(JSP内置对象上)
  3. POJ1321(棋盘问题)
  4. Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效
  5. 数据库连接类:DatabaseConnection
  6. 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
  7. 框架页,URL中文参数乱码
  8. java学习与总结:MySQL和数据库基础知识
  9. 模拟电子技术_清华大学华成英教授主讲之符号说明
  10. Linux命令中的rpm安装命令