请教一个从Collection到Map保持排序顺序不变的问题

一个简单的类
public class Foo {
String valueA;
String valueB;
}

有3个这样的对象按照以下的顺序存在一个Collection c里:
foo1: valueA = "kick"; valueB = "me";
foo2: valueA = "kiss"; valueB = "you";
foo3: valueA = "kill"; valueB = "he";

然后想生成一个Map m,m的key为foon的valueA,对应的value为foon的valueB
做法如下:
Map m = new HashMap();
Iterator i = collection.iterator();
while(i.hasNext()){
Foo element = (Foo)i.next();
m.put(element.valueA,element.valueB);
}

当用Map的keySet方法遍历所有的元素时候,出来的顺序已经和原来的Collection不一样了,如果额外多加一个List来记录key,是可以解决,但是总觉得Java的架构里应该有更简单的方法可以实现这样的效果.

请大家帮忙,谢谢了!

参考;你可以自己实现一个map,提供按存入顺序遍历元素的方法.

good idea,以下是实现的代码,希望有人碰到这样的问题也可以用


public class OrderedMap extends HashMap {

private List orderedKeys = new LinkedList();

/**
* @see java.util.MapkeySet()
*/
public Set keySet() {
return new OrderedSet(orderedKeys);
}

/**
* @see java.util.Mapput(java.lang.Object, java.lang.Object)
*/

public Object put(Object key, Object value) {
if (!orderedKeys.contains(key))
orderedKeys.add(key);
return super.put(key, value);
}

/**
* @see java.util.Mapclear()
*/

public void clear() {
super.clear();
orderedKeys.clear();
}

/**
* @see java.util.Mapremove(java.lang.Object)
*/

public Object remove(Object key) {
if (orderedKeys.contains(key))
orderedKeys.remove(key);
return super.remove(key);
}
}

笨,java自带的LinkedHashMap就干这活