In the interest of completeness ...
public class LinkedProperties extends Properties {
private final LinkedHashSet keys = new LinkedHashSet();
@Override
public Enumeration> propertyNames() {
return Collections.enumeration(keys);
}
@Override
public synchronized Enumeration elements() {
return Collections.enumeration(keys);
}
public Enumeration keys() {
return Collections.enumeration(keys);
}
public Object put(Object key, Object value) {
keys.add(key);
return super.put(key, value);
}
@Override
public synchronized Object remove(Object key) {
keys.remove(key);
return super.remove(key);
}
@Override
public synchronized void clear() {
keys.clear();
super.clear();
}
}
I dont think the methods returning set should be overridden as a set by definition does not maintain insertion order