java - Java 中的 HashMap

标签 java arrays list hashmap

问题

我正在尝试使用 Java 中的 HashMap 创建类似于多维关联数组的东西。出于某种原因,我得到了 map 内所有元素的相似结果。以下是我正在使用的代码

private HashMap<String, HashMap<String, String>>  getNullableColumns(Connection dbConn, String resource) throws SQLException {

    HashMap<String, HashMap<String, String>>  nullableColumns = new HashMap<String, HashMap<String, String>>();
    HashMap<String, String> column = new HashMap<String, String>();
    DatabaseMetaData dm = dbConn.getMetaData();
    ResultSet rsColumns = dm.getColumns(null, null, getTable(resource), null);
    while( rsColumns.next( ) )
    {
        String type = rsColumns.getString("TYPE_NAME");
        String nullable1 = rsColumns.getString("NULLABLE");
        String nullable2 = rsColumns.getString("IS_NULLABLE");
        String dataType = rsColumns.getString("DATA_TYPE");
        String columnName = rsColumns.getString("COLUMN_NAME");

        column.put("type", type);
        column.put("nullable", nullable1);
        nullableColumns.put(columnName, column);

    }
    return nullableColumns;

}

解释:

我在 HashMap 列中得到了正确的结果,但是当我将它们中的每一个放入 nullableColumns 时,所有元素最后都具有相同的属性,例如,所有字段的类型都是 varchar 并且 nullable 是 0。看起来我最后我以某种方式覆盖了结果,但我不知道我在哪里犯了这个错误。

有什么建议吗?

最佳答案

您正在添加相同的 HashMap 实例

HashMap<String, String> column = new HashMap<String, String>();

多次到外层Map,所以nullableColumnsMap中的所有值都是相同的HashMap实例。

您应该在循环的每次迭代中创建一个新的 HashMap:

while (rsColumns.next( ) )
    column = new HashMap<String, String>();

    String type = rsColumns.getString("TYPE_NAME");
    String nullable1 = rsColumns.getString("NULLABLE");
    String nullable2 = rsColumns.getString("IS_NULLABLE");
    String dataType = rsColumns.getString("DATA_TYPE");
    String columnName = rsColumns.getString("COLUMN_NAME");

    column.put("type", type);
    column.put("nullable", nullable1);
    nullableColumns.put(columnName, column)
}

关于java - Java 中的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252317/

相关文章:

java - 向 Spring Data Repository 添加自定义功能的问题

java - 如何将包含数字和字母的字符串分成仅数字?

java - 简单的线条画

javascript - 如何用常量值初始化 JavaScript 数组?

python - 两个列表中彼此重复的唯一项目的列表

java - 如何使用 Java Swing 制作可扩展列表

java - 如何使用非静态的公共(public)方法?

python - 展开并填充 numpy 数组

ios - 如何在空数组中打印数据

python - 与空列表比较时使用 "=="运算符是否错误?