001: package org.shiftone.cache.util;
002:
003: import java.util.Arrays;
004: import java.util.Hashtable;
005: import java.util.Map;
006:
007: /**
008: * @version $Revision: 1.4 $
009: * @author <a href="mailto:jeff@shiftone.org">Jeff Drost</a>
010: */
011: public class MapFactory {
012:
013: private static final Log LOG = new Log(MapFactory.class);
014: public static final float DEFAULT_LOAD_FACTOR = 0.5f;
015: public static final int[] PRIMES = {
016:
017: // 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 37, 43, 53, 59, 67, 79, 89, 101, 113, 127, 149, //
018: 167, 191, 223, 251, 281, 313, 349,
019: 389,
020: 433,
021: 487,
022: 541,
023: 601,
024: 673,
025: 751,
026: 839,
027: 937,
028: 1049, //
029: 1171, 1301, 1447, 1607, 1787,
030: 1987,
031: 2207,
032: 2459,
033: 2731,
034: 3037,
035: 3373,
036: 3761,
037: 4177,
038: 4637, //
039: 5153, 5737, 6373, 7079, 7867,
040: 8737,
041: 9719,
042: 10789,
043: 11981,
044: 13309,
045: 14779,
046: 16411,
047: 18217, //
048: 20231, 22469, 24943, 27689, 30757,
049: 34141,
050: 37897,
051: 42071,
052: 46703,
053: 51853,
054: 57557,
055: 63901, //
056: 70937, 78779, 87473, 97103, 107791,
057: 119653,
058: 132817,
059: 147449,
060: 163673,
061: 181693,
062: 201683, //
063: 223903, 248533, 275881, 306239, 339943, 377339,
064: 418849,
065: 464923,
066: 516077,
067: 572867,
068: 635891, //
069: 705841, 783487, 869683, 965357, 1071563, 1189453,
070: 1320301,
071: 1465547,
072: 1626763,
073: 1805729, //
074: 2004377, 2224861, 2469629, 2741303, 3042857, 3377579,
075: 3749117,
076: 4161527,
077: 4619309, //
078: 5127433, 5691457, 6317527, 7012469, 7783843, 8640109,
079: 9590531, 10645507,
080: 11816521, //
081: 13116343, 14559151, 16160663, 17938357, 19911581, 22101889,
082: 24533099, 27231751, //
083: 30227287, 33552293, 37243051, 41339843, Integer.MAX_VALUE };
084:
085: public static int getNearPrime(int number) {
086:
087: int value = Arrays.binarySearch(PRIMES, number);
088:
089: if (value < 0) {
090: value = -value - 1;
091: }
092:
093: return PRIMES[value];
094: }
095:
096: public static Map createMap(int initialCapacity) {
097: return new Hashtable(getNearPrime(initialCapacity),
098: DEFAULT_LOAD_FACTOR);
099: }
100:
101: private static void test(int a) {
102:
103: int b = getNearPrime(a);
104:
105: LOG.info(a + " -> " + b);
106: }
107:
108: public static void main(String args[]) {
109:
110: test(0);
111: test(965356);
112: test(965357);
113: test(965358);
114: test(Integer.MAX_VALUE);
115: }
116: }
|