背包是一种不支持从中删除元素的数据集合。它的目的是帮助用例收集元素并迭代遍历所有收集到的元素。迭代遍历的顺序没有要求(实现代码中是后进先出)。
使用链表以及泛型机制来实现可以达到最优设计目标:
(1)可以处理任意类型的数据;
(2)所需的空间总是和集合的大小成正比;
(3)操作所需的时间总是和集合的大小无关。
1 import java.util.Iterator;
2 import java.util.Scanner;
3
4 public class Bag<Item> implements Iterable<Item> {
5 private class Node{
6 Item item;
7 Node next;
8 }
9
10 private Node first = null;
11 private int n = 0;
12
13 public boolean isEmpty(){
14 return first == null;
15 }
16
17 public int size(){
18 return n;
19 }
20
21 public void add(Item item){
22 Node oldFirst = first;
23 first = new Node();
24 first.item = item;
25 first.next = oldFirst;
26 n ++;
27 }
28
29 public Iterator<Item> iterator(){
30 return new ListIterator();
31 }
32
33 private class ListIterator implements Iterator<Item>{
34 private Node current = first;
35
36 public boolean hasNext(){
37 return current != null;
38 }
39
40 public Item next(){
41 Item item = current.item;
42 current = current.next;
43 return item;
44 }
45
46 public void remove(){}
47 }
48
49 }
(参考自《Algorithm 4th》)
时间: 2024-08-02 01:33:47