weixin_42348874 2009-11-14 22:04
浏览 229
已采纳

一个关于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,输出“字段名”就全一样了,都是最后一个

  • 写回答

1条回答 默认 最新

  • badonly 2009-11-15 00:19
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作