关于HashMap存放数据的问题

[code="java"]
//这个map的key是数据库表查出的gid,value是数据库表查出的list
Map> colorMap=new HashMap>();
List goodsColorList=new ArrayList();

while (rs.next()) {
goodsColor=new GoodsColor();
goodsColor.setId(rs.getInt("id"));
goodsColor.setGid(rs.getInt("gid"));
goodsColor.setColorName(rs.getString("colorName"));
goodsColor.setPrice(rs.getDouble("price"));

goodsColorList.add(goodsColor);
colorMap.put(rs.getInt("gid"),goodsColorList);

}
[/code]

问题是现在把所有数据累加到goodsColorList然后又存入到colorMap,而且colorMap的key也重复了。
[code="java"]
id gid 颜色 价格

2 1 蓝黑 4000.00
3 2 银色 1220.00
4 2 黑色 1220.00
5 3 白色 1050.00
6 3 紫色 1050.00
7 3 蓝色 1050.00
8 3 黑色 1100.00
9 3 粉色 1100.00

[/code]
想得到的效果是colorMap里不同的key存放不同的value。
求指教! :( :(

[code="java"]
while(rs.next()){
int gid = rs.getInt("gid");
if (colorMap.containsKey(gid) && colorMap.get(gid) != null) {
goodsColor = new GoodsColor();
goodsColor.setId(rs.getInt("id"));
goodsColor.setGid(rs.getInt("gid"));
goodsColor.setColorName(rs.getString("colorName"));
goodsColor.setPrice(rs.getDouble("price"));
colorMap.get(gid).add(goodsColor);
} else {
List goodsColorList=new ArrayList();

goodsColor = new GoodsColor();
goodsColor.setId(rs.getInt("id"));
goodsColor.setGid(rs.getInt("gid"));
goodsColor.setColorName(rs.getString("colorName"));
goodsColor.setPrice(rs.getDouble("price"));
goodsColorList.add(goodsColor);
colorMap.put(rs.getInt("gid"), goodsColorList);
}
}
[/code]

为什么不直接用id做key呢?
gid是不唯一的,后面写进去的必然会把前面的覆盖掉啊

while(rs.next())
{

int key = rs.getInt("gid");

List goodsColorList =null;
if(!colorMap.containsKey(key))
{
goodsColorList=new ArrayList();

goodsColor = new GoodsColor();

goodsColor.setId(rs.getInt("id"));

goodsColor.setGid(rs.getInt("gid"));

goodsColor.setColorName(rs.getString("colorName"));

goodsColor.setPrice(rs.getDouble("price"));

goodsColorList.add(goodsColor);

}
else
{
    goodsColorList = colorMap.get(key);
    goodsColor = new GoodsColor();   
    goodsColor.setId(rs.getInt("id"));   
    goodsColor.setGid(rs.getInt("gid"));   
    goodsColor.setColorName(rs.getString("colorName"));   
    goodsColor.setPrice(rs.getDouble("price"));   
    goodsColorList.add(goodsColor);  
}
colorMap.put(key, goodsColorList);

}