美文网首页java学习
NO.26 队列和栈、Map查询表

NO.26 队列和栈、Map查询表

作者: smallnumber | 来源:发表于2017-07-27 23:24 被阅读0次

队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素。

队列遵循先进先出(FIFO First Input First Output )的原则。

JDK中提供了Queue接口,同时使得LinkedList实现了该接口(选择LinkedList实现Queue的原因在于Queue经常要进行插入和删除的操作,而LinkedList在这方面效率较高)。

Queue方法:

队列

遍历元素:


Deque是Queue的子接口,定义了所谓“双端队列”即从队列的两端分别可以入队(offer)和出队(poll),LinkedList实现了该接口。

Deque方法:

双端队列

如果将Deque限制为只能从一端入队和出队,则可实现“栈”(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop。

栈遵循先进后出(FILO First Input Last Output )的原则。

栈的方法:


java提供了一组可以以键值对(key-value)的形式存储数据的数据结构,这种数据结构称为Map。我们可以把Map看成一个多行两列的表格,其中第一列存放key,第二列存放value。

而每一行就相当于一组key-value对,表示一组数据。

Map对存入的元素有一个要求,就是key不能重复,所谓不能重复指的是在Map中不能包含两个equals为true的key。

Map对于key,value的类型没有严格要求,只要是引用类型均可。但是为了保证在使用时不会造成数据混乱,通常我们会使用泛型去约束key与value的类型。

常用实现类:java.util.HashMap(哈希表,散列表)----TreeMap 二叉树实现。

Map方法:

put、get方法 remove方法

还有常用方法是Map中的containsKey方法用于检测当前Map中是否包含给定的key。若当前Map中包含给定的key(这里检查是否包含是根据key的equals比较结果为依据的。)则返回true。

遍历Map的三种方式:

1)遍历所有的key   2)遍历每一组键值对(Entry)   3)遍历所有的value(相对不常用)

两种常用遍历方法 遍历value值

关于HashMap:

影响散列表(HashMap)查询性能的一个主要因素就是作为Key元素equals方法与hashcode方法的结果。妥善重写这两个方法可以避免在HashMap中出现链表导致HashMap检索性能降低。

API手册对这两个方法的重写有说明,重写原则:

1)成对重写。即:当我们需要重写一个类的equals方法时就应当连同重写hashcode

2)一致性。即:当两个对象equals比较为true时,hashcode方法返回的数字应当相等。反之亦然。虽然反之不是必须的,但是应当保证两个对象hashcode值相等时,equals方法比较为true,否则这样的对象在作为key元素在HashMap中使用时会产生链表,降低HashMap查询性能。

3)稳定性。即:当参与equals比较的属性没有发生变化的前提下,多次调用hashcode方法返回的数字必须相同。

一起重写两个方法(eclipse右键Source可自动生成)

散列表中名词:

Capacity:容量, hash表里bucket(桶)的数量,也就是散列数组大小

Initial capacity:初始容量,创建hash表的时 初始bucket的数量, 默认构建容量是16,也可以使用特定容量

Size : 大小, 当前散列表中存储数据的数量

Load factor:加载因子,默认值0.75(就是75%), 向散列表增加数据时如果 size/capacity 的值大于Load factor则发生扩容并且重新散列(rehash)

注:当加载因子较小时候散列查找性能会提高, 同时也浪费了散列桶空间容量。 0.75是性能和空间相对平衡结果。在创建散列表时候指定合理容量, 从而可以减少rehash提高性能。

相关文章

  • NO.26 队列和栈、Map查询表

    队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添...

  • 8.数据结构

    数组链表队列栈哈希表哈希map树

  • Java集合框架

    常见的数据结构 线性表数组链表 栈与队列 树 堆 散列表 顶层接口 Collection和Map Collecti...

  • 栈和队列(一)

    栈和队列 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS。 栈和队列是限定插入和删除只能在表的“端点...

  • 栈和队列

    栈和队列 本质上是稍加限制的线性表 栈和队列定义 栈顺序栈定义 链栈结点定义 队列顺序队列 链队列链队类型定义 链...

  • 数据结构

    线性表 线性表分为顺序表与链表 栈和队列 栈:先进后出队列:先进先出栈和队列都是线性表的特征形式 二叉树 对于相对...

  • 第四章栈与队列

    知识大纲 栈和队列的数据结构 相同点 栈和队列都是对删除和插入做了限制的线性表 栈和队列的都是建立在线性表的...

  • 4.数据结构--栈与队列

    首先需要介绍栈和队列与线性表的关系栈:栈是限定在表尾进行插入和删除的线性表队列:队列是只允许在一段进行插入操作,在...

  • java 常用数据结构

    目录一、数组二、List三、栈(Stack)四、队列(Queue)五、集合(Set)六 、哈希表(Map)七、各遍...

  • 数据结构(一)队列与栈

    队列和栈都是线性表,队列先进先出(FIFO),栈先进后出(FILO) 队列 只允许在表的头部删除,尾部插入。普通的...

网友评论

    本文标题:NO.26 队列和栈、Map查询表

    本文链接:https://www.haomeiwen.com/subject/wuptlxtx.html