Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/IntMap.java @ 278:55fad5e0e98b
Ensure capacity grows regardless of initial map size. Separate unit test
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 29 Aug 2011 23:31:37 +0200 |
| parents | 6355ecda1f08 |
| children | 81e9a3c9bafe |
comparison
equal
deleted
inserted
replaced
| 277:74e7493a042a | 278:55fad5e0e98b |
|---|---|
| 69 int ix = binarySearch(keys, size, key); | 69 int ix = binarySearch(keys, size, key); |
| 70 if (ix < 0) { | 70 if (ix < 0) { |
| 71 final int insertPoint = -ix - 1; | 71 final int insertPoint = -ix - 1; |
| 72 assert insertPoint <= size; // can't be greater, provided binarySearch didn't malfunction. | 72 assert insertPoint <= size; // can't be greater, provided binarySearch didn't malfunction. |
| 73 if (size == keys.length) { | 73 if (size == keys.length) { |
| 74 int newCapacity = size + (size >>> 2); | 74 int capInc = size >>> 2; // +25% |
| 75 int newCapacity = size + (capInc < 2 ? 2 : capInc) ; | |
| 75 int[] newKeys = new int[newCapacity]; | 76 int[] newKeys = new int[newCapacity]; |
| 76 Object[] newValues = new Object[newCapacity]; | 77 Object[] newValues = new Object[newCapacity]; |
| 77 System.arraycopy(keys, 0, newKeys, 0, insertPoint); | 78 System.arraycopy(keys, 0, newKeys, 0, insertPoint); |
| 78 System.arraycopy(keys, insertPoint, newKeys, insertPoint+1, keys.length - insertPoint); | 79 System.arraycopy(keys, insertPoint, newKeys, insertPoint+1, keys.length - insertPoint); |
| 79 System.arraycopy(values, 0, newValues, 0, insertPoint); | 80 System.arraycopy(values, 0, newValues, 0, insertPoint); |
| 125 else | 126 else |
| 126 return mid; // key found | 127 return mid; // key found |
| 127 } | 128 } |
| 128 return -(low + 1); // key not found. | 129 return -(low + 1); // key not found. |
| 129 } | 130 } |
| 130 | |
| 131 public static void main(String[] args) { | |
| 132 IntMap<String> m = new IntMap<String>(-1); | |
| 133 m.put(18, "18"); | |
| 134 m.put(1, "1"); | |
| 135 m.put(9, "9"); | |
| 136 m.put(20, "20"); | |
| 137 m.put(2, "2"); | |
| 138 m.put(3, "3"); | |
| 139 m.put(21, "21"); | |
| 140 m.put(15, "15"); | |
| 141 m.put(12, "12"); | |
| 142 m.put(11, "11"); | |
| 143 m.put(31, "31"); | |
| 144 System.out.printf("%d [%d..%d]\n", m.size(), m.firstKey(), m.lastKey()); | |
| 145 for (int i = m.firstKey(); i <= m.lastKey(); i++) { | |
| 146 if (m.containsKey(i)) { | |
| 147 System.out.printf("@%02d:%s\n", i, m.get(i)); | |
| 148 } | |
| 149 } | |
| 150 } | |
| 151 } | 131 } |
