1 package com.quadcap.sql.lock; 2 3 40 41 import java.util.Comparator ; 42 43 import com.quadcap.util.Debug; 44 45 50 public class SortedArray { 51 Comparator compare; 52 int size; 53 Object [] array = new Object [32]; 54 55 public SortedArray(Comparator compare) { 56 this.compare = compare; 57 } 58 59 public final int find(Object obj) { 60 int lo = 0; 61 int hi = size - 1; 62 63 while (lo <= hi) { 64 int mid = (lo + hi) / 2; 65 Object m = array[mid]; 66 int cmp = compare.compare(m, obj); 67 if (cmp < 0) { 68 lo = mid + 1; 69 } else if (cmp > 0) { 70 hi = mid - 1; 71 } else { 72 return mid; 73 } 74 } 75 return 0 - (lo + 1); 76 } 77 78 95 public void add(Object obj) { 96 int pos = find(obj); 109 if (pos < 0) { 110 pos = 0 - (pos + 1); 111 checkSizeForAdd(); 112 113 if (pos < size) { 114 System.arraycopy(array, pos, array, pos+1, size - pos); 115 } 116 array[pos] = obj; 117 size++; 118 } 119 } 120 121 public void remove(Object obj) { 122 removeAt(find(obj)); 123 } 124 125 public void removeAt(int pos) { 126 if (pos >= 0) { 127 int next = pos + 1; 128 if (next < size) { 129 System.arraycopy(array, next, array, pos, size - next); 130 } 131 size--; 132 } 133 } 134 135 public int size() { 136 return size; 137 } 138 139 public final Object get(int i) { 140 return array[i]; 141 } 142 143 final void checkSizeForAdd() { 144 if (size >= array.length) { 145 Object [] old = array; 146 array = new Object [old.length + (old.length >> 2)]; 147 System.arraycopy(old, 0, array, 0, old.length); 148 } 149 } 150 151 public String toString() { 152 StringBuffer sb = new StringBuffer (""); 153 for (int i = 0; i < size; i++) { 154 sb.append("\n"); 155 sb.append(String.valueOf(i)); 156 sb.append(": "); 157 sb.append(array[i]); 158 } 159 sb.append("\n"); 160 return sb.toString(); 161 } 162 163 } 164 | Popular Tags |