Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.70 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class MultiSet<E> extends AbstractCollection<E> {
  4.     private HashMap<E, Integer> elements = new HashMap<E, Integer>();
  5.  
  6.     public MultiSet() {}
  7.  
  8.     public MultiSet(Collection<E> c) {
  9.         addAll(c);
  10.     }
  11.  
  12.     public boolean add(E e) {
  13.         int offset = 0;
  14.  
  15.         if(elements.keySet().contains(e)) {
  16.             offset = elements.get(e);
  17.         }
  18.  
  19.         elements.put(e, offset + 1);
  20.        
  21.         return true;
  22.     }
  23.  
  24.     private void removeElement(E e) {
  25.         if(elements.keySet().contains(e)) {
  26.             int value = elements.get(e);
  27.  
  28.             if(value == 1) {
  29.                 elements.remove(e);
  30.             } else {
  31.                 elements.put(e, value - 1);
  32.             }
  33.         }
  34.     }
  35.  
  36.     public int size() {
  37.         int sum = 0;
  38.  
  39.         for(E i : this)
  40.             sum++;
  41.  
  42.         return sum;
  43.     }
  44.  
  45.     public boolean equals(Object other) {
  46.         if(other == null) return false;
  47.         if(getClass() != other.getClass()) return false;
  48.  
  49.         MultiSet<?> otherMS = (MultiSet<?>)other;
  50.         return otherMS.elements.equals(elements);
  51.     }
  52.  
  53.     public int hashCode() {
  54.         return elements.hashCode();
  55.     }
  56.  
  57.     public String toString() {
  58.         return elements.entrySet().toString();
  59.     }
  60.  
  61.     public Iterator iterator() {
  62.         ArrayList<E> entries = new ArrayList<E>();
  63.         Iterator<E> it = elements.keySet().iterator();
  64.  
  65.         while(it.hasNext()) {
  66.             E key = it.next();
  67.             int value = elements.get(key);
  68.            
  69.             for(int i = 0; i < value; i++)
  70.                 entries.add(key);
  71.         }
  72.  
  73.         return new Iterator() {
  74.             private Iterator<E> internalIt = entries.iterator();
  75.             private E current = null;
  76.  
  77.             public boolean hasNext() {
  78.                 return internalIt.hasNext();
  79.             }
  80.  
  81.             public E next() {
  82.                 current = internalIt.next();
  83.                 return current;
  84.             }
  85.  
  86.             public void remove() {
  87.                 if(current != null) removeElement(current);
  88.             }
  89.         };
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement