LayerHash implements Layerable<KeyType> { public synchronized void addToTop(KeyType key, ValueType value) { if(hash.containsKey(key)) { hash.put(key, value); } else { hash.put(key, value); zlist.addToTop(key); } }  int size(); ValueType get(KeyType key); List<KeyType> getKeysAsList(); synchronized void addToTop(KeyType key, ValueType value); synchronized void addToBottom(KeyType key, ValueType value); synchronized boolean moveToTop(KeyType element); synchronized boolean moveAbove(KeyType objectToMove, KeyType reference); synchronized boolean moveBeneath(KeyType objectToMove, KeyType reference); synchronized boolean moveToBottom(KeyType key); synchronized boolean moveUp(KeyType key); synchronized boolean moveDown(KeyType key); @Override List<KeyType> elements(); List<KeyType> keys(); synchronized boolean remove(KeyType key); ValueType getTop(); ValueType getBottom(); ValueType getAbove(KeyType key); ValueType getBeneath(KeyType key);  }
@Test public void addToTop() { Object obj = new Object(); layerHash.addToTop(obj, obj); assertEquals(obj, layerHash.getTop()); assertEquals(obj3, layerHash.getKeysAsList().get(0)); assertEquals(obj2, layerHash.getKeysAsList().get(1)); assertEquals(obj1, layerHash.getKeysAsList().get(2)); assertEquals(obj, layerHash.getKeysAsList().get(3)); }