一个关于java对象在hashmap里比较的问题 搞了好久

现在从数据库中取出所有的索引,因为是oracle,用DatabaseMetaData的getIndexInfo方法。

比如说 第6(索引名)、8(序列号)、9(列名称),联合索引第6列相同的,第8、9都不一样。

我目前把联合索引取出来,得到一个ResultSet对象 ,而这个ResultSet不是每个索引一行数据,而是每个索引的每个字段一行。

现在我的问题是:

如何循环将同是一个索引的不同字段(也就是索引名相同而,序列号和列名称不同)取出来放在一个list里。

也就是如何判断两行ResultSet是同一个联合索引的字段

目前的方法是使用HASH对键进行映射的数据存储类

public class SimpleHashList
{
private Map > dataMap = new HashMap >();

public void put(String key, Object value) 
{ 
    List <Object> valList = dataMap.get(key); 
    if (valList == null) 
    { 
        valList = new ArrayList <Object>(); 
    } 

    valList.add(value); 
    dataMap.put(valList); 

} 


public List <Object> get(String key) 
{ 
    return dataMap.get(key); 
} 

public Map <String, List <Object>> getDataMap() 
{ 

    return dataMap; 
} 

}

实现中出现的问题:

while (rs.next()) {
String INDEX_NAME = indexResultSet.getString("INDEX_NAME");
index.setName(INDEX_NAME );
index.setMColumnStr(COLUMN_NAME);
System.out.println("COLUMN_NAME="+COLUMN_NAME);
hashList.put(INDEX_NAME, index);
}
aMap =hashList.getDataMap();
Iterator keys=aMap.keySet().iterator();
while (keys.hasNext()) {
String indexName = (String) keys.next();
System.out.println("indexName="+indexName);
List indexList=aMap.get(indexName);
for (int i = 0; i < indexList.size(); i++) {
Index index1 = indexList.get(i);
//if(i==index1.getSeq())
System.out.println("字段名="+index1.getMColumnStr());
}
}

打印输出是

COLUMN_NAME=SEQ
COLUMN_NAME=SHORT_NAME
COLUMN_NAME=ROLE_ID
COLUMN_NAME=LEVELS
COLUMN_NAME=ROLE_ID
COLUMN_NAME=ROLE_CODE

indexName=ONE_INDEX_CARROT
字段名=ROLE_CODE
indexName=UNION_INDEX_CARO
字段名=ROLE_CODE
字段名=ROLE_CODE
字段名=ROLE_CODE
indexName=UNION_INDEX_CARROT
字段名=ROLE_CODE
字段名=ROLE_CODE

字段输入的时候还是正确的COLUMN_NAME,输出“字段名”就全一样了,都是最后一个

index在循环里面new,Map里存的是index的引用! 你只声明了一个引用--index,而且对象也只只有一个!