算法-背包,队列和栈

### 泛型
泛型,也叫做参数化类型。
< type >将type定义为一个类型参数,它是一个象征性的占位符,表示的是用例将会使用的某种具体数据类型。type将会在需要时被替换为任意引用数据类型。
泛型可以在编译时就发现类型错误,若定义为Object类型,并进行类型转换,则在运行时才能发现类型错误。
注意:泛型的数据类型必须为引用类型,不可以为原始数据类型(如:int,double)。
自动装箱:自动将一个原始数据类型转换为对应的引用类型。
自动拆箱:自动将原始数据类型对应的引用类型转换为原始数据类型。
 
 

数组和链表

背包,队列,栈可以用数组或者链表实现。
数组是固定大小的,必须在创建时就指定大小。若要提高灵活性和资源利用率,需要通过拷贝当前数组到更大/更小的新数组,来实现自动扩充或缩小。
链表的基本单位是节点(node),每个节点都包含数据和指向下一个节点的引用。节点用多少创建多少,不用的节点失去引用被垃圾回收,无需担心链表的大小问题。但是比起数组多维护了引用这一资源,增加了复杂性和占用空间。
 
 

背包

背包(Bag)收集元素并迭代遍历所有收集到的元素。
迭代的顺序不确定,使用背包说明元素的处理顺序不重要。
背包不支持从中删除元素。
API:

  • Bag()
  • void add(Item item)
  • boolean isEmpty()
  • int size()

 
 

队列

队列(Queue)是一种基于先进先出(FIFO)策略的集合类型。
API:

  • Queue()
  • void enqueue(Item item)
  • Item dequeue()
  • boolean isEmpty()
  • int size()

 
 

栈(Stack)是一种基于后进先出(LIFO)策略的集合类型。
API:

  • Stack()
  • void push(Item item)
  • Item pop()
  • boolean isEmpty()
  • int size()

猜你喜欢

转载自blog.csdn.net/qq_31730735/article/details/81153375