java bag_在Java中使用Bag的原因

Stack是ADT的元素集合,具有特定的删除顺序= LIFO(后进先出),允许重复,

队列是元素集合的ADT,具有特定的删除顺序= FIFO(先进先出),允许重复,

LinkedList是列表的实现,

Set是不允许重复的元素集合的ADT,

Bag是元素集合的ADT,允许重复.

通常,任何包含元素的东西都是Collection.

任何允许重复的集合都是Bag,否则就是Set.

通过索引访问元素的任何包都是List.

在最后一个之后附加新元素并且具有从头部(第一索引)移除元素的方法的Bag是Queue.

在最后一个之后附加新元素并且具有从尾部(最后一个索引)移除元素的方法的Bag是Stack.

示例:在Java中,LinkedList是一个集合,包,列表,队列,你也可以使用它,因为它支持堆栈操作(添加~addLast~push,peekLast,removeLast~pop),所以你可以调用它它也堆叠.为什么它没有实现Stack接口的原因是,偷看方法是由Queue实现保留的,它检索列表的头部(第一个元素).因此,在LinkedList的情况下,“堆叠方法”从Deque导出.

Bag是否包含remove(Object)可能取决于实现e. G.您可以实现自己的Bag类型,支持此操作.您还可以实现get(int)操作来访问指定索引上的对象. get(int)的时间复杂度取决于您的实现e. G.一个人可以通过链表实现Bag,所以复杂度平均为O(n / 2),另一个通过可调整大小的数组(array-list),通过索引直接访问元素,因此复杂度为O(1) .

但Bag的主要思想是,它允许重复和迭代这个集合.它是否支持其他有用的操作取决于实现者的设计决策.

使用哪种收集类型取决于您的需求,如果不需要重复,您将使用Set而不是Bag.此外,如果你关心删除订单,你会选择Stack或Queue,它们基本上是具有特定删除顺序的包.您可以将Bag视为Stack和Queue的超类型,它通过特定操作扩展其api.

大多数情况下,您只需要收集对象并以某种方式处理它们(迭代元素处理).因此,您将使用最简单的Bag实现,即单向链接列表.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值