Java 如何获取驻留在列表上的HASHMAP的键值

Java 如何获取驻留在列表上的HASHMAP的键值,java,list,hashmap,Java,List,Hashmap,我的代码: public List resultSetToArrayList(ResultSet rs) throws SQLException{ ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); ArrayList list = new ArrayList(50); while (rs.next()){ HashMap row = new HashMap(column

我的代码:

public List resultSetToArrayList(ResultSet rs) throws SQLException{
  ResultSetMetaData md = rs.getMetaData();
  int columns = md.getColumnCount();
  ArrayList list = new ArrayList(50);
  while (rs.next()){
     HashMap row = new HashMap(columns);
     for(int i=1; i<=columns; ++i){           
      row.put(md.getColumnName(i),rs.getObject(i));
     }
      list.add(row);
  }

return list;
}
公共列表resultSetToArrayList(ResultSet rs)引发SQLException{
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
ArrayList=新的ArrayList(50);
while(rs.next()){
HashMap行=新的HashMap(列);

对于(int i=1;i如果您的问题是不应该使用的原始类型
列表
,则必须将行强制转换为
哈希映射

编辑:根据您的评论,您似乎需要一列作为键,另一列作为值。因此,当您创建
HashMap
时,不应使用
getColumnName
作为键,而应使用该列的值:

ArrayList list = new ArrayList(50);
while (rs.next()){
    HashMap row = new HashMap(columns);
    row.put(rs.getObject(0),rs.getObject(1));
    list.add(row);
}
警告:我不知道你想用它做什么,但这很奇怪,因为在
哈希映射中,行只有一个键和一个值。你可能想使用一个包含所有行的
哈希映射(并去掉
列表
):

HashMap<String,String> table = new HashMap<String,String>();
while (rs.next()){
    table.put(rs.getString(0),rs.getString(1));
}
HashMap table=newhashmap();
while(rs.next()){
表.put(rs.getString(0),rs.getString(1));
}
如果您事先不知道键将在列0中,值将在列1中,但您知道列的名称,那么可以在列中循环查找具有正确名称的列的索引

String keyColumnName = "FROM";
int keyColumnNum = -1; // to be found
for (int i = 0; i < md.getColumnCount(); i++) {
    if (keyColumnName.equals.getColumnName(i)) {
        keyColumnNum = i;
        break;
    }
}
// if the column exists, keyColumnNum has the right value here
String keyColumnName=“FROM”;
int keyColumnNum=-1;//找不到
对于(int i=0;i
首先,您不应该使用原始类型。请将您的代码修改为:

public List<Map<String, Object>> resultSetToArrayList(ResultSet rs) throws SQLException {
    final ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(50);
    while (rs.next()) {
        final HashMap<String, Object> row = new HashMap<String, Object>(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }
    return list;
}
List<Map<String, Object>> list = yourObject.resultSetToArrayList(rs);
for (Map<String, Object> map : list) {
    //you can call map.get("yourkey") here
}
公共列表resultSetToArrayList(ResultSet rs)引发SQLException{
最终结果setMetadata md=rs.getMetaData();
int columns=md.getColumnCount();
最终列表=新的ArrayList(50);
while(rs.next()){
最终HashMap行=新HashMap(列);

对于(int i=1;我认为他/她不希望设置键。我认为他/她知道要查找哪个键,并且在值之后。因此,只需对每个
HashMap
执行
get
,就足够了。在我以前的方法中,我只返回list。因此,我获取客户端逻辑的list。因此,我必须从中获取HashMap键和值List@DavidWallace是的,我不确定OP到底想要什么,因此我发表了评论。我试图回答我对问题的理解^^@user3496581在我的回答中,我从你的客户返回的列表中得到了所有信息。哦,你的意思是你返回了原始类型,就是这样吗?@Joffrey我还有一个疑问。如果row.put(md.getColumnName(I),rs.getObject(I));它将如何存储在Hashmap中?示例我的表只有两列,有n行。列1=一些字符串,列2=字符串。如果我使用row.put(md.getColumnName(I),rs.getObject(I));Hashmap中的键和值中会有什么。您到底不想做什么?您想获取列名吗?值?要将什么与什么进行比较?我强烈建议学习在集合类上使用类型参数。这将节省大量不必要的强制转换。我认为您应该按顺序使用LinkedHashMapr来保持列的顺序,并使用Map声明变量,如下所示:Map row=new LinkedHashMap(columns);@sendon1982为什么要对局部变量使用
Map
,而不是具体类型?即使它是局部变量,我认为在使用Spring注入时,它可以配置不同的实现。这只是我的意见。我想它也是较短的代码^^^,但因为过去有人声称接口调用较慢(至少没有JIT),我习惯于为局部变量声明具体类型。
String keyColumnName = "FROM";
int keyColumnNum = -1; // to be found
for (int i = 0; i < md.getColumnCount(); i++) {
    if (keyColumnName.equals.getColumnName(i)) {
        keyColumnNum = i;
        break;
    }
}
// if the column exists, keyColumnNum has the right value here
public List<Map<String, Object>> resultSetToArrayList(ResultSet rs) throws SQLException {
    final ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(50);
    while (rs.next()) {
        final HashMap<String, Object> row = new HashMap<String, Object>(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }
    return list;
}
List<Map<String, Object>> list = yourObject.resultSetToArrayList(rs);
for (Map<String, Object> map : list) {
    //you can call map.get("yourkey") here
}