Stack
是具有特定删除顺序 = LIFO(后进先出)的元素集合的 ADT,允许重复,
Queue
是具有特定删除顺序 = FIFO(先进先出)的元素集合的 ADT,允许重复,
LinkedList
是列表的实现,
Set
是不允许重复的元素集合的 ADT,
Bag
是允许重复的元素集合的 ADT。
通常,任何包含元素的东西都是 。任何允许重复的集合是 ,否则它是 。通过索引访问元素的任何包都是 。在最后一个元素之后附加新元素并具有从头部(第一个索引)中删除元素的方法的Bag是 。在最后一个元素之后附加新元素并具有从尾部(最后一个索引)中删除元素的方法的Bag是 。Collection
Bag
Set
List
Queue
Stack
示例:在Java中,LinkedList是一个集合,包,列表,队列,并且还可以使用它,因为它是一个堆栈,因为它支持堆栈操作(~~,,~),因此您可以将其称为堆栈。它不实现 Stack 接口的原因是,该方法由队列实现保留,该实现检索列表的头部(第一个元素)。因此,在LinkedList的情况下,“堆栈方法”派生自Deque。add
addLast
push
peekLast
removeLast
pop
peek
是否包含可能取决于实现,例如,您可以实现自己的支持此操作的类型。您还可以实现操作以访问指定索引上的对象。的时间复杂度将取决于您的实现,例如,一个可以通过链表实现,因此复杂度将平均为O(n/2),另一个通过可调整大小的数组(数组列表)通过索引直接访问元素,因此复杂度将是O(1)。Bag
remove(Object)
Bag
get(int)
get(int)
Bag
但的主要思想是,它允许通过这个集合进行重复和迭代。它是否支持其他有用的操作取决于实现者的设计决策。Bag
使用哪种集合类型取决于您的需要,如果不需要重复项,则可以使用 代替 。此外,如果您关心删除订单,您可以选择或基本上具有特定的删除顺序。您可以将其视为的超类型,它通过特定操作扩展其 api。Set
Bag
Stack
Queue
Bags
Bag
Stack
Queue
大多数时候,你只需要收集对象并以某种方式处理它们(迭代+元素处理)。因此,您将使用最简单的实现,即一个定向链表。Bag