【发布时间】:2016-12-06 02:20:23
【问题描述】:
我最初编写了一个ArrayList 并在其中存储了唯一值(用户名,即Strings)。后来我需要使用ArrayList 来搜索其中是否存在用户。那是 O(n) 用于搜索。
我的技术主管希望我将其更改为 HashMap,并将用户名存储为数组中的键,并将值存储为空 Strings。
所以,在 Java 中 -
hashmap.put("johndoe","");
我可以稍后通过运行查看此用户是否存在 -
hashmap.containsKey("johndoe");
这是O(1) 对吗?
我的负责人说这是一种更有效的方法,这对我来说很有意义,但将 null/empty 作为值放在 hashmap 中并将元素作为键存储在其中似乎有点不对劲。
我的问题是,这是一个好方法吗?效率胜过ArrayList#contains 或一般的数组搜索。有用。
我担心的是,我没有看到其他人在搜索后这样做。我可能在某个地方遗漏了一个明显的问题,但我看不到它。
【问题讨论】:
-
plus1 因为当一个人不知道 Java 的数据结构时,这是一个有效的问题。
-
HashSet是HashMap.keySet()的实现。如果你想把一个地图变成一个集合,你可以使用set = Collections.newSetFromMap(map) -
这个问题没有错。这个论坛是错误的地方。 “Stack Overflow 是一个面向专业和爱好者程序员的问答网站”。
-
如果用户名不区分大小写,
map<string,string>使用名称作为键和值可能有助于映射到用户名的规范表示。 -
@rdllopes 我向您保证,以及本网站上的几乎所有人,都存在知识空白,有人会声称您“应该知道”。该网站上大量评分最高的问题都属于该类别。对于哪些问题不够明显,不属于这里,您不会成为仲裁者。
标签: java arrays performance hashmap asymptotic-complexity