1 10 package org.jgap.audit; 11 12 import java.io.*; 13 import java.util.*; 14 import org.jgap.util.*; 15 16 22 public class KeyedValues 23 implements ICloneable, Serializable { 24 25 private static final String CVS_REVISION = "$Revision: 1.6 $"; 26 27 28 private List m_data; 29 30 36 public KeyedValues() { 37 m_data = Collections.synchronizedList(new ArrayList()); 38 } 39 40 46 public int size() { 47 return m_data.size(); 48 } 49 50 57 public Number getValue(final int a_index) { 58 Number result; 59 final KeyedValue kval = (KeyedValue) m_data.get(a_index); 60 if (kval != null) { 61 result = kval.getValue(); 62 } 63 else { 64 result = null; 65 } 66 return result; 67 } 68 69 77 public Comparable getKey(final int a_index) { 78 Comparable result; 79 final KeyedValue item = (KeyedValue) m_data.get(a_index); 80 if (item != null) { 81 result = item.getKey(); 82 } 83 else { 84 result = null; 85 } 86 return result; 87 } 88 89 97 public int getIndex(final Comparable a_key) { 98 int i = 0; 99 final Iterator iterator = m_data.iterator(); 100 while (iterator.hasNext()) { 101 final KeyedValue kv = (KeyedValue) iterator.next(); 102 if (kv.getKey() != null) { 103 if (kv.getKey().equals(a_key)) { 104 return i; 105 } 106 } 107 else { 108 if (a_key == null) { 109 return i; 110 } 111 } 112 i++; 113 } 114 return -1; 116 } 117 118 126 public List getKeys() { 127 final List result = new java.util.ArrayList (); 128 final Iterator iterator = m_data.iterator(); 129 while (iterator.hasNext()) { 130 final KeyedValue kv = (KeyedValue) iterator.next(); 131 result.add(kv.getKey()); 132 } 133 return result; 134 } 135 136 146 public Number getValue(final Comparable a_key) { 147 Number result; 148 final int index = getIndex(a_key); 149 if (index >= 0) { 150 result = getValue(index); 151 } 152 else { 153 result = null; 154 } 155 return result; 156 } 157 158 167 public void setValue(final Comparable a_key, final Number a_value) { 168 final int keyIndex = getIndex(a_key); 169 if (keyIndex >= 0) { 170 final KeyedValue kv = (KeyedValue) m_data.get(keyIndex); 171 kv.setValue(a_value); 172 } 173 else { 174 final KeyedValue kv = new KeyedValue(a_key, a_value); 175 m_data.add(kv); 176 } 177 } 178 179 189 public boolean equals(final Object a_obj) { 190 if (a_obj == null) { 191 return false; 192 } 193 if (a_obj == this) { 194 return true; 195 } 196 if (! (a_obj instanceof KeyedValues)) { 197 return false; 198 } 199 final KeyedValues kvs = (KeyedValues) a_obj; 200 final int count = size(); 201 if (count != kvs.size()) { 202 return false; 203 } 204 for (int i = 0; i < count; i++) { 205 final Comparable k1 = getKey(i); 206 final Comparable k2 = kvs.getKey(i); 207 if (!k1.equals(k2)) { 208 return false; 209 } 210 final Number v1 = getValue(i); 211 final Number v2 = kvs.getValue(i); 212 if (v1 == null) { 213 if (v2 != null) { 214 return false; 215 } 216 } 217 else { 218 if (!v1.equals(v2)) { 219 return false; 220 } 221 } 222 } 223 return true; 224 } 225 226 232 public int hashCode() { 233 if (m_data.size() == 0) { 234 return -29; 235 } 236 else { 237 return m_data.hashCode(); 238 } 239 } 240 241 247 public Object clone() { 248 try { 249 final KeyedValues clone = (KeyedValues)super.clone(); 250 clone.m_data = Collections.synchronizedList(new ArrayList()); 251 final Iterator iterator = m_data.iterator(); 252 while (iterator.hasNext()) { 253 final KeyedValue kv = (KeyedValue) iterator.next(); 254 clone.m_data.add(kv.clone()); 255 } 256 return clone; 257 } catch (CloneNotSupportedException cex) { 258 throw new CloneException(cex); 259 } 260 } 261 } 262 | Popular Tags |