private void resolveOverlaps(TreeMap<Integer, Domain> doms, Domain lastDom) { ArrayList<Integer> flaggedToRemove = new ArrayList<Integer>(); int lastStart = 0; for (int startPos : doms.keySet()) { Domain curDom = doms.get(startPos); if (lastDom != null) { if (lastDom.overlaps(curDom)) { if (lastDom.getEvalue() >= curDom.getEvalue()) flaggedToRemove.add(lastStart); else flaggedToRemove.add(startPos); } } lastStart = startPos; lastDom = curDom; } if (!flaggedToRemove.isEmpty()) { for (int remPos : flaggedToRemove) doms.remove(remPos); resolveOverlaps(doms, null); } }