Source of LinkedBag1.java


  1: /**
  2:     A class of bags whose entries are stored in a chain of linked nodes.
  3:     The bag is never full.
  4:     INCOMPLETE DEFINITION; includes definitions for the methods add,
  5:     toArray, isEmpty, and getCurrentSize.
  6:     @author Frank M. Carrano, Timothy M. Henry
  7:     @version 5.0
  8: */
  9: public final class LinkedBag1<T> implements BagInterface<T>
 10: {
 11:         private Node firstNode;       // Reference to first node
 12:         private int numberOfEntries;

 14:         public LinkedBag1()
 15:         {
 16:                 firstNode = null;
 17:       numberOfEntries = 0;
 18:         } // end default constructor

 20:         /** Adds a new entry to this bag.
 21:             @param newEntry  The object to be added as a new entry.
 22:             @return  True. */
 23:         public boolean add(T newEntry) // OutOfMemoryError possible
 24:         {
 25:       // Add to beginning of chain:
 26:                 Node newNode = new Node(newEntry);
 27:                 newNode.next = firstNode;  // Make new node reference rest of chain
 28:                                  // (firstNode is null if chain is empty)
 29:       firstNode = newNode;       // New node is at beginning of chain
 30:                 numberOfEntries++;
 31:       
 32:                 return true;
 33:         } // end add

 35:         /** Retrieves all entries that are in this bag.
 36:        @return  A newly allocated array of all the entries in this bag. */
 37:         public T[] toArray()
 38:         {
 39:       // The cast is safe because the new array contains null entries.
 40:       @SuppressWarnings("unchecked")
 41:       T[] result = (T[])new Object[numberOfEntries]; // Unchecked cast
 42:       
 43:       int index = 0;
 44:       Node currentNode = firstNode;
 45:       while ((index < numberOfEntries) && (currentNode != null))
 46:       {
 47:          result[index] = currentNode.data;
 48:          index++;
 49:          currentNode = currentNode.next;
 50:       } // end while
 51:       
 52:       return result;
 53:       // Note: The body of this method could consist of one return statement,
 54:       // if you call Arrays.copyOf
 55:         } // end toArray
 56:    
 57:         /** Sees whether this bag is empty.
 58:        @return  True if the bag is empty, or false if not. */
 59:         public boolean isEmpty()
 60:         {
 61:                 return numberOfEntries == 0;
 62:         } // end isEmpty
 63:    
 64:         /** Gets the number of entries currently in this bag.
 65:        @return  The integer number of entries currently in the bag. */
 66:         public int getCurrentSize()
 67:         {
 68:                 return numberOfEntries;
 69:         } // end getCurrentSize
 70:    
 71: // STUBS:

 73:         /** Removes one unspecified entry from this bag, if possible.
 74:        @return  Either the removed entry, if the removal
 75:                 was successful, or null. */
 76:         public T remove()
 77:    {
 78:       return null; // STUB
 79:    } // end remove
 80:    
 81:         /** Removes one occurrence of a given entry from this bag.
 82:        @param anEntry  The entry to be removed.
 83:        @return  True if the removal was successful, or false otherwise. */
 84:    public boolean remove(T anEntry)
 85:    {
 86:       return false; // STUB
 87:    } // end remove
 88:         
 89:         /** Removes all entries from this bag. */
 90:         public void clear()
 91:    {
 92:       // STUB
 93:    } // end clear
 94:         
 95:         /** Counts the number of times a given entry appears in this bag.
 96:                  @param anEntry  The entry to be counted.
 97:                  @return  The number of times anEntry appears in the bag. */
 98:         public int getFrequencyOf(T anEntry)
 99:    {
100:       return 0; // STUB
101:    } // end getFrequencyOf
102:         
103:         /** Tests whether this bag contains a given entry.
104:                  @param anEntry  The entry to locate.
105:                  @return  True if the bag contains anEntry, or false otherwise. */
106:         public boolean contains(T anEntry)
107:    {
108:       return false; // STUB
109:    } // end contains

111:         private class Node
112:         {
113:           private T    data; // Entry in bag
114:           private Node next; // Link to next node

116:                 private Node(T dataPortion)
117:                 {
118:                         this(dataPortion, null);        
119:                 } // end constructor
120:                 
121:                 private Node(T dataPortion, Node nextNode)
122:                 {
123:                         data = dataPortion;
124:                         next = nextNode;        
125:                 } // end constructor
126:         } // end Node
127: } // end LinkedBag1