0

学生プロジェクトの一環として、私は大規模なデータベースを構築しています。これには、理論的には何百万ものオブジェクトが含まれる可能性があります。

ファーストネームから始めます (つまり、Person fName = "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

3 つの提案があります。1 つ目は、あなたの質問に対する直接的な回答です。

  • 最初に、最初の文字をキーとしてマップにマップを保存し、「マスター マップ」で正しいマップを検索するだけです。

  • 第 2 に、すべてを 1 つのマップに単純に格納するよりも高速ではなく、おそらく低速です。問題があることを証明するための測定を行わずに、自分がライブラリ クラスの作成者よりも賢いと思い込まないでください。

  • 第三に、「データベース」とおっしゃいましたが、これらすべての代わりにデータベースを使用してみませんか? Postgres と MySQL はどちらも無料で使いやすく、ニーズに十分に応えます。

于 2013-06-07T17:46:24.453 に答える
0

マップをネストできます。最初のマップのキーは文字用です。

于 2013-06-07T17:45:00.863 に答える
0

マップのリストを作成することもできますが、マップをまったく使用したくない場合があります。TreeMap や tri のようなものがうまく機能し、単一のデータ構造を持つことができます。

また、文字列のハッシュコードを取得してからハッシュすることは、文字列を使用するよりも高速ではない可能性があります。

于 2013-06-07T17:47:24.190 に答える