/**
  * Returns the keys for the values in the collection
  *
  * @return The keys (never null)
  * @author Klaus Meffert
  * @since 2.3
  */
 public List getKeys() {
   final List result = new java.util.ArrayList();
   final Iterator iterator = m_data.iterator();
   while (iterator.hasNext()) {
     final KeyedValue kv = (KeyedValue) iterator.next();
     result.add(kv.getKey());
   }
   return result;
 }
 /**
  * @return clone of the current instance
  * @author Klaus Meffert
  * @since 2.3
  */
 public Object clone() {
   try {
     final KeyedValues clone = (KeyedValues) super.clone();
     clone.m_data = Collections.synchronizedList(new ArrayList());
     final Iterator iterator = m_data.iterator();
     while (iterator.hasNext()) {
       final KeyedValue kv = (KeyedValue) iterator.next();
       clone.m_data.add(kv.clone());
     }
     return clone;
   } catch (CloneNotSupportedException cex) {
     throw new CloneException(cex);
   }
 }
 /**
  * @param a_key the key to search for
  * @return index for a given key or -1 if the key is not found
  * @author Klaus Meffert
  * @since 2.3
  */
 public int getIndex(final Comparable a_key) {
   int i = 0;
   final Iterator iterator = m_data.iterator();
   while (iterator.hasNext()) {
     final KeyedValue kv = (KeyedValue) iterator.next();
     if (kv.getKey() != null) {
       if (kv.getKey().equals(a_key)) {
         return i;
       }
     } else {
       if (a_key == null) {
         return i;
       }
     }
     i++;
   }
   // key not found
   return -1;
 }