All pastes #954704 Raw Edit

Miscellany

public text v1 · immutable
#954704 ·published 2008-03-24 01:42 UTC
rendered paste body
package blogindex.test;

import java.io.*;
import java.nio.*;
import java.util.*;

public class Test6 {

    static double total = 2000000;

    public static void stats( long before, long after ) {
        long used = (after-before);
        System.out.printf( "total: %,d\n", used );
        System.out.printf( "per key: %f\n", used / total );

    }

    public static void test1() {

        System.out.println( "test1:" );

        Runtime r = Runtime.getRuntime();

        System.gc();
        
        long before = r.totalMemory() - r.freeMemory();

        //ByteBuffer buff = new ByteBuffer();
        Map<String,Integer> test = new TreeMap();

        int prefix = 10000000;

        for( int i = 0; i < total; ++i ) {
            String key = "" + (prefix + i);
            test.put( key, i );
        }

        System.gc();

        long after = r.totalMemory() - r.freeMemory();

        stats( before, after );
        
    }

    public static void test2() {

        System.out.println( "test2:" );

        Runtime r = Runtime.getRuntime();

        System.gc();

        long before = r.totalMemory() - r.freeMemory();

        //ByteBuffer buff = new ByteBuffer();
        Map<ByteArrayKey,Integer> test = new TreeMap();

        int prefix = 10000000;

        for( int i = 0; i < total; ++i ) {
            String key = "" + (prefix + i);
            test.put( new ByteArrayKey( key.getBytes() ), i );
        }

        System.gc();

        long after = r.totalMemory() - r.freeMemory();

        stats( before, after );
        
    }
    
    public static void main( String[] args ) throws Throwable {

        test1();
        test1();
        test1();
        test2();
        
    }

}

class ByteArrayKey implements Comparable {

    byte[] data;
    
    public ByteArrayKey( byte[] data ) {
        this.data = data;
    }

    public int hashCode() {

        int v = 0;

        for( int i = 0; i < data.length; ++i ) {
            v += (int)data[i];
        }

        return v;
        
    }

    public boolean equals( Object obj ) {

        ByteArrayKey b = (ByteArrayKey)obj;

        return Arrays.equals( data, b.data );
        
    }

    public int compareTo(Object o) {

        ByteArrayKey b = (ByteArrayKey)o;

        for( int i = 0; i < data.length; ++i ) {

            if ( b.data.length < i )
                return -1;
            
            if ( data[i] < b.data[i] )
                return -1;

            if ( data[i] > b.data[i] )
                return 1;

            if ( data[i] == b.data[i] ) {

                //we're not done with the strings yet.
                if ( i < data.length - 1 )
                    continue;

                return 0;
                
            }
            
        }

        //only used if the comparing object is actually larger.
        return 1;
        
    }
    
}