代码之家  ›  专栏  ›  技术社区  ›  akdom

如何在Java中创建哈希表?

  •  14
  • akdom  · 技术社区  · 17 年前

    在Java中创建哈希表(或关联数组…)最直接的方法是什么?我的谷歌傅已经找到了几个例子,但有标准的方法吗?

    是否有方法用键列表填充表->值对,而不对每对对象单独调用add方法?

    8 回复  |  直到 11 年前
        1
  •  28
  •   epotter    17 年前
    Map map = new HashMap();
    Hashtable ht = new Hashtable();
    

    这两个类都可以在java.util.包中找到。2之间的区别解释如下 jGuru FAQ entry .

        2
  •  23
  •   izb    17 年前

    您可以使用双大括号来设置数据。你仍然可以调用add或put,但它不那么难看:

    private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
        put("foo",      1);
        put("bar",      256);
        put("data",     3);
        put("moredata", 27);
        put("hello",    32);
        put("world",    65536);
     }};
    
        3
  •  7
  •   Cem Catikkas    17 年前

    另外,不要忘记,Map和Hashtable在Java 5及更高版本中都是泛型的(就像Java中的任何其他类一样) Collections framework ).

    Map<String, Integer> numbers = new HashMap<String, Integer>();
    numbers.put("one", 1);
    numbers.put("two", 2);
    numbers.put("three", 3);
    
    Integer one = numbers.get("one");
    Assert.assertEquals(1, one);
    
        4
  •  2
  •   nbro kai    11 年前
    import java.util.HashMap;
    
    Map map = new HashMap();
    
        5
  •  1
  •   Community Mohan Dere    9 年前

    什么 Edmund 说。

    至于不打电话。一直加,不,不是习惯性的。如果你真的想的话,你可以做各种各样的黑客(将其存储在数组中,然后循环),但我不建议这样做。

        6
  •  0
  •   Mocky    17 年前

    是否有方法用键列表填充表->值对,而不对每对对象单独调用add方法?

    你的问题的一个问题是,你一开始没有提到你的数据是什么形式的。如果你的配对列表恰好是Map列表。进入对象会很容易。

    顺便说一句,有一个名为java.util.til的类(备受诟病)。属性是哈希表的扩展。它只需要字符串键和值,并允许您使用文件或流加载和存储数据。它读取和写入的文件格式如下:

    key1=value1
    key2=value2
    

    我不知道这是否是你想要的,但在某些情况下,这可能是有用的。

        7
  •  0
  •   huzeyfe koriander    10 年前

    值得注意的是,Java的哈希函数不是最优的。如果你想减少冲突,并几乎完全消除50%容量的重新哈希,我会使用Buz哈希算法 Buz Hash

    Java的哈希算法之所以薄弱,最明显的原因在于它对字符串的哈希方式。

    "a".hash() 给你ASCII表示法 "a" - 97 ,所以 "b" 会是 98 哈希的全部意义在于分配一个任意且“尽可能随机”的数字。

    如果你需要一个快速而肮脏的哈希表,一定要使用 java.util 。如果你正在寻找更具可扩展性的强大功能,我会考虑实现你自己的功能。

        8
  •  -1
  •   Sanip Juraj Valkučák    7 年前
    Hashtable<Object, Double> hashTable = new Hashtable<>();
    

    输入值 ...

    获取最大值

    Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());
    
    if (optionalMax.isPresent())
     System.out.println(optionalMax.get());