Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.64 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class LimitedSetClass<T> implements LimitedSet<T> {
  4.     /** Maximum set size. */
  5.     private final int maxSetSize = 4;
  6.     /** Set's elements with 'contains' methods usage count */
  7.     private final Set<T> elements = new HashSet<T>();
  8.    
  9.     private final LinkedList<T> objects = new LinkedList<T>();
  10.     private final LinkedList<Integer> usages = new LinkedList<Integer>();
  11.    
  12.     @Override
  13.     public void add(T t) {
  14.         if (!elements.contains(t)) {
  15.             if (elements.size() == maxSetSize) {               
  16.                 elements.remove(objects.getFirst());
  17.                 objects.removeFirst();
  18.                 usages.removeFirst();
  19.             }
  20.            
  21.             elements.add(t);
  22.             objects.addFirst(t);
  23.             usages.addFirst(0);
  24.         }
  25.     }
  26.  
  27.     @Override
  28.     public boolean remove(T t) {
  29.         boolean isRemoved = false;
  30.        
  31.         if (elements.contains(t)) {
  32.             int index = objects.indexOf(t);
  33.             usages.remove(index);
  34.             isRemoved = objects.remove(t) && elements.remove(t);
  35.         }
  36.        
  37.         return isRemoved;
  38.     }
  39.  
  40.     @Override
  41.     public boolean contains(T t) {
  42.         boolean contains = false;
  43.        
  44.         if (elements.contains(t)) {
  45.             contains = true;
  46.             swapListsValues(t);
  47.         }
  48.        
  49.         return contains;
  50.     }
  51.    
  52.     private void swapListsValues(T t) {
  53.         int index = objects.indexOf(t);
  54.         int usageValue = usages.get(index) + 1;
  55.         int size = elements.size();
  56.        
  57.         for (int i = index; i < size; i++) {
  58.             if (i == size - 1) {
  59.                 Collections.swap(objects, index, i);
  60.                 Collections.swap(usages, index, i);
  61.                 usages.set(i, usageValue);
  62.             }
  63.            
  64.             if (usages.get(i) == usageValue) {
  65.                 Collections.swap(objects, index, i - 1);
  66.                 Collections.swap(usages, index, i - 1);
  67.                 usages.set(i - 1, usageValue);
  68.             }
  69.         }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement