我最初编写了一个 ArrayList
,并将唯一值(用户名,即 Strings
)存储其中。后来我需要使用 ArrayList
来搜索其中是否存在用户。这就是搜索所需的 O(n)
。
我的技术领导要求我将其更改为 HashMap
,并将用户名作为键存储在数组中,将值设为空的 Strings
。
因此,在Java中 -
hashmap.put("johndoe","");
我可以通过运行以下命令稍后查看该用户是否存在 -
hashmap.containsKey("johndoe");
这是 O(1)
的,对吗?
我的领导说这是一种更有效的方法,我也觉得有道理,但是把null/empty作为值放在HashMap中,并将元素存储为键,这似乎有点不对劲。
我的问题是,这样做好吗?效率比ArrayList#contains
或普通数组搜索都高。它能工作。
我担心的是,在搜索后我没有看到其他人这样做过。我可能会忽略了某些显而易见的问题,但我看不出来。
HashSet
是HashMap.keySet()
的一种实现。如果你想将一个Map转换为Set,可以使用set = Collections.newSetFromMap(map)
。 - Peter Lawreymap<string,string>
可能有助于映射到用户名的规范表示。 - CodesInChaos