package com.mrfeinberg; import java.text.*; /** * @author jdf */ public class TimeRegionMatches { private static final String A = "absofreakinlutely"; private static final String B = "absoLUTEly"; private static final int ITERS = 1000000; static long foo = 0; static interface Strategy { void compare(String a, String b); } static class NullStrategy implements Strategy { public void compare(String a, String b) { foo++; } } static class RegionStrategy implements Strategy { public void compare(String a, String b) { if (a.regionMatches(true, 11, b, 4, 6)) foo++; } } static class NewStringStrategy implements Strategy { public void compare(String a, String b) { if (a.substring(11).equalsIgnoreCase(b.substring(4))) foo++; } } static NumberFormat F = new DecimalFormat("#.00ms"); static void time(Strategy s) { long oldFoo = foo; System.gc(); long startTime = System.nanoTime(); long startMem = Runtime.getRuntime().freeMemory(); for (int i = 0; i < ITERS; i++) s.compare(A, B); long deltaT = System.nanoTime() - startTime; long deltaMem = startMem - Runtime.getRuntime().freeMemory(); assert foo - oldFoo == ITERS; System.out.printf("%17s %8s %s bytes allocated\n", s.getClass().getSimpleName(), F.format(deltaT / 1000000.0), deltaMem); } public static void main(String[] args) { Strategy[] sts = new Strategy[] { new NullStrategy(), new RegionStrategy(), new NewStringStrategy() }; for (Strategy s : sts) time(s); System.out.println("-----------------------"); for (Strategy s : sts) time(s); System.out.println("-----------------------"); for (Strategy s : sts) time(s); } }