0

作为学生项目的一部分,我正在构建一个大型数据库,理论上它可以包含数百万个对象。

我从名字开始(即 Person fName = "John")。

我的计划是将“John”转换为哈希码,将哈希码转换为整数,然后将其存储在地图中 - (因为整数比较更快)。

现在这是我的问题 - 为了使迭代更快,我想要单独的静态映射,根据名称的第一个字母访问。像

public class FirstNameList {

    private static Map<Integer, String> a = new HashMap<Integer, String>();
    private static Map<Integer, String> b = new HashMap<Integer, String>();
    private static Map<Integer, String> c = new HashMap<Integer, String>();
    // etc

    public void addFName(String word) {
        if (word.length() == 0)
            throw new IllegalArgumentException("No name entered");
        word = word.toLowerCase();
        char x = word.charAt(0);

        Integer i = word.hashCode();

        x-correctMap.put(i, word);
    }

然而,用 26 个 if 语句来选择正确的列表感觉不是很有效。有谁知道如何选择正确的地图?或者只是总体上更好的想法?

4

3 回答 3

2

我有三个建议:第一个是直接回答你的问题:

  • 首先,您可以将地图存储在以初始字符为键的地图中,然后只需在“主地图”中查找正确的地图。

  • 其次,这不会比简单地将所有内容存储在一张地图中更快——可能更慢。永远不要假设您比库类的作者更聪明,而无需通过测量来证明存在问题。

  • 第三,您说“数据库”,那么为什么不使用数据库来代替所有这些呢?Postgres 和 MySQL 都是免费且易于使用的,可以很好地满足您的需求。

于 2013-06-07T17:46:24.453 回答
0

你可以嵌套你的地图,第一个地图的关键是字母。

于 2013-06-07T17:45:00.863 回答
0

您可能有一个地图列表,但您可能根本不想使用地图。像 TreeMap 或 trie 这样的东西会更好,并允许您拥有单一的数据结构。

此外,获取字符串的哈希码然后散列可能不会比仅使用字符串快。

于 2013-06-07T17:47:24.190 回答