表、栈和队列(JAVA实现)

1 概述

抽象数据类型(abstract data type, ADT)是带有一组操作的一些对象的集合。

本篇文章主要介绍三种最基本的数据结构:表 ADT , 栈 ADT , 队列 ADT

2 表 ADT

2.1 预先知识

2.1.1 Collection 接口

Collection API 位于 java.util接口。集合的概念在Collection 接口中得到抽象,它存储一组类型相同的对象。

在这里插入图片描述

Collection 接口拓展了 Iterable 接口。实现 Iterable 接口的那些类可以拥有增强的 for循环,该循环施于这些类上以观察它们所有的项。

2.1.2 Iterator接口

在这里插入图片描述

Iterator 接口包含 remove 方法,该方法可以删除next 最新返回的项(此后,我们不能再调用remove , 直到对next 再一次调用以后)

当直接使用 Iterator(而不是通过一个增强的 for 循环间接使用)时,重要的一点:如果对正在被迭代的集合进行结构上的改变(即对该集合使用add 、remove 或 clear方法),那么该迭代器就不再合法(并且在其后使用该迭代器时将会有 ConcurrentModificationException 异常被抛出),但是如果迭代器调用了它自己的remove方法,那么该迭代器就依然是合法的,这是Iterator 的 remove方法的一个主要优点。

Iterator 的 remove 方法的主要优点还在于,Collection 的 remove 方法必须首先找出要被删除的项。而Iterator 的 remove 方法事先知道了要删除的项的准确位置,那么删除它的开销就会小很多。

2.2 List 表 的数组实现(ArrayList)

ArrayList 类提供了 List ADT 的一种 可增长数组的实现。

优点:

  • 对于 get 和 set 的调用花费常数时间;

缺点:

  • 新项的插入和现有项的删除代价昂贵,除非变动时在 ArrayLis的末端进行。

对于搜索,ArrayList 和 LinkedList都是低效的。
对于ArrayList 删除和插入都可能会移动其余项,造成巨大的代价。

2.3 List 表 的列表实现(LinkedList)

LinkedList 是 双向链表;

优点:

  • 新项的插入和现有项的删除均开销很小(假设变动项的位置是已知的),在表的前端进行添加和删除是常数时间的操作;

缺点:

  • 它不容易索引,因此对get的调用是昂贵的,除非调用非常接近表的端点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值