notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • API
  • 泛型
  • 自动装箱
  • 可迭代的集合类型
  • 背包
  • 先进先出队列
  • 下压栈
  • 集合类数据类型的实现
  • 定容栈
  • 泛型
  1. blogs
  2. history

背包、队列和栈

许多基础数据类型都和对象的集合有关。具体来说,数据类型的值就是一组对象的集合,所有操作都是关于添加、删除或是访问集合中的对象。

API

泛型可迭代的基础集合数据类型的API

背包

public class Bag<Item> implements Iterable<Item>| ----|---- Bag()|创建一个空背包 void add(Item item)|添加一个元素 boolean isEmpty()|背包是否为空 int size()|背包中的元素数量

先进先出(FIFO)队列

public class Queue<Item> implements Iterable<Item>| ----|---- Queue()|创建空队列 void enqueue(Item item)|添加一个元素 Item dequeue()|删除最近添加的元素 boolean isEmpty()|队列是否为空 int size()|队列中的元素数量

下压(后进先出,LIFO)栈

public class Statck<Item> implements Iterable<Item>| -----|----- Static()|创建一个空栈 void push(Item item)|添加一个元素 Item pop()|删除最近添加的元素 boolean isEmpty()|栈是否为空 int size()|栈中的元素数量

泛型

集合类的抽象数据类型的一个关键特性是我们应该可以用它们存储任意类型的数据,Java机制——泛型可以做到这点。

在每份API中,类名后的<Item>记号将Item定义为一个类型参数,它是一个象征性的占位符,表示的是用例将会用到的某种数据类型。

自动装箱

类型参数Item必须实例化为引用类型。原始数据类型的封装类型(Boolean、Byte、Character、Double、Float、Integer、Long和Short)就是原始数据类型所对应的引用类型。

Statck<Integer> statck=new Statck<Integer>();
statck.push(17);   //自动装箱(int -> Integer)
int i=statck.pop();   //自动拆箱(Integer -> int)

自动装箱:自动将一个原始数据类型转换为一个封装类型。 自动拆箱:自动将一个封装类型转换为一个原始数据类型。

可迭代的集合类型

例如用例在Queue中维护一个交易集合,如:

Queue<Transaction> collection=new Queue<Transaction>();

如果集合是可迭代的,用例用一行语句就可以打印出交易的列表:

for(Transaction t : collection)
{StdOut.println(t);}

背包

背包是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素(用例也可以检查背包是否为空或者获取背包中的元素的数量)。迭代的顺序不确定且与用例无关。

先进先出队列

先进先出队列(或简称队列)是一种基于先进先出(FIFO)策略的集合类型。在应用程序中使用队列的主要原因是在用集合保存元素的同时保存它们的相对顺序:使它们入列顺序和出列顺序相同。

下压栈

下压栈(或简称栈)是一种基于后进后出(LIFO)策略的集合类型。在应用程序中使用栈迭代器的一个典型原因是在用集合保存元素的同时颠倒它们的相对顺序。

集合类数据类型的实现

定容栈

定容栈是一种表示容量固定的字符串栈的抽象数据类型。它只能处理String值,它要求用例指定一个容量且不支持迭代。

public class FixedCapacityStackOfStrings| ----------------------------------------|--- FixedCapacityStackOfStrings(int cap)|创建一个容量为cap的空栈 void push(String item)|添加一个字符串 String pop()|删除最近添加的字符串 boolean isEmpty()|栈是否为空 int size()|栈中的字符串数量

泛型

实现一个泛型的栈:

Previous编译原理引论Next虚拟机安装Linux系统及常用软件

Last updated 3 years ago