import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; public class InLine { public static void main(String[] args) { int count = 0; Random rand = new Random(); Map> genes = new HashMap>(); for (int i = 0; i < 70000; i++) { Integer randStart = rand.nextInt(5235641); Integer randLength = rand.nextInt(40000); if (!genes.containsKey(randStart)) { List list = new ArrayList(); genes.put(randStart, list); } genes.get(randStart).add(randLength); } int chromosomeLength = 5235641; SimpleRange simpleRange = new SimpleRange(100000, 200000); Set setSimpleRanges = new HashSet(); setSimpleRanges.add(simpleRange); long startTimeMillis = System.currentTimeMillis(); for (int i = 0; i < 50; i++) { System.out .println("Iter = " + i + " Time from start: " + ((double) (System.currentTimeMillis() - startTimeMillis) / 1000)); for (int geneFrom : genes.keySet()) { for (int geneLength : genes.get(geneFrom)) { int geneTo = (geneFrom + geneLength - 1) % chromosomeLength + 1; if (geneTo < geneFrom) { // split // low range first SimpleRange lowSimpleRange = new SimpleRange(0, geneTo); SimpleRange highSimpleRange = new SimpleRange(geneFrom, chromosomeLength); Set setSimpleRanges1 = new HashSet(); setSimpleRanges1.add(lowSimpleRange); setSimpleRanges1.add(highSimpleRange); count++; } else { // single SimpleRange simpleRange1 = new SimpleRange(geneFrom, geneTo); Set setSimpleRanges1 = new HashSet(); setSimpleRanges1.add(simpleRange1); count++; } } } } System.out .println("Time from start: " + ((double) (System.currentTimeMillis() - startTimeMillis) / 1000) + " count=" + count); } } class LegalRange { Set set; public LegalRange(Set set) { this.set = set; } } class SimpleRange { int from; int to; public SimpleRange(int from, int to) { this.from = from; this.to = to; } }