如何在HashMap数组中改进搜索

时间:2014-12-17 05:38:05

标签: java arrays algorithm hash

在任何HashMap(或任何基于散列的数据结构)中的搜索都需要单个散列操作i-e O(1)。但是,当我们必须搜索HashMaps数组时,单个搜索将需要O(n)散列操作,其中n是数组的大小。我想知道因为数组是连续内存位置的集合,因此可以有一种有效的方法来减少从HashMap数组中的O(n)到O(1)的搜索。或者我们可以设计一些事实上具有数组优势的对象以及需要单个哈希操作进行搜索。任何建议???

考虑这个场景,您正在处理来自不同用户的元素,并且您希望根据用户配置文件(彼此分开)保留它们。最有效的内存方法是将它们分开使用HashMap数组。

3 个答案:

答案 0 :(得分:1)

答案就在你的问题中。当您使用普通数组存储这些元素时,搜索时无法获得O(1)复杂性。

你说搜索哈希地图的复杂性是O(1),为什么不在哈希地图中存储这些哈希地图?哈哈,我会把这个实施留给你。

答案 1 :(得分:1)

我已编辑了您的问题,以包含各种用户帐户的假设情景,每个帐户都有各种属性。如在不同的答案中所提到的,这里的解决方案是地图地图。发生了两次单独的搜索:

  1. 找到合适的用户
  2. 找到该用户的正确属性
  3. 每个搜索都可以使用单独的地图完成。

    用户地图:

    class Application {
    
        ...
    
        Map<String, User> userMap = new HashMap<>();
    
        public User getUser(String userName) {
            return userMap.get(userName);
        }
    
        ...
    }
    

    物业地图:

    class User {
    
        ...
    
        Map<String, Property> propertyMap = new HashMap<>();
    
        public Property getProperty(String propertyName) {
            return propertyMap .get(propertyName);
        }
    
        ...
    }
    

    现在找到名为favoriteTowel的用户名为Arthur Dent的属性:

    myApplication.getUser("Arthur Dent").getProperty("favoriteTowel");
    

答案 2 :(得分:0)

Go Go For java.util packages,Go Go for Java Collections

查看set(Hashsetenumset)和hash(HashMaplinkedhash ...,idnetityhash ..)的实现。 they have O(1) for contains()

以下是统计数据供参考。

enter image description here

enter image description here enter image description here