BinaryHeap { public void decrease(K k) { int index = indexMap.get(k); if (index > 0) { fixUp(index); } } BinaryHeap(boolean min, Function<K, V> function); void addElement(K element); void fixUp(int i); void fixDown(int i); boolean contains(K k); K extract(); boolean isEmpty(); void increase(K k); void decrease(K k);  }
@Test public void testDecrease() throws Exception { HashMap<Integer, Integer> map = new HashMap<>(); BinaryHeap<Integer, Integer> bi = new BinaryHeap<>(true, map::get); map.put(1, 1); map.put(2, 2); map.put(3, 3); map.put(4, 4); map.put(5, 5); map.put(6, 6); map.put(7, 7); map.put(8, 8); bi.addElement(5); bi.addElement(6); bi.addElement(4); bi.addElement(3); bi.addElement(7); assertEquals(bi.extract().intValue(), 3); map.put(7, 0); bi.decrease(7); assertEquals(bi.extract().intValue(), 7); bi.addElement(8); bi.addElement(2); map.put(8, 1); bi.decrease(8); assertEquals(bi.extract().intValue(), 8); }