java – 在HashMap中使用空/空值存储数据是一个好主意吗?

我最初写了一个ArrayList并存储了唯一的值(用户名,即字符串)。后来我需要使用ArrayList来搜索用户是否存在。这是搜索的O(n)。

我的技术主管想让我把它改变为一个HashMap,并将用户名作为键存储在数组中,并将值存储为空字符串。

所以,在Java –

hashmap.put("johndoe","");

我可以看到这个用户以后是否存在通过运行 –

hashmap.containsKey("johndoe"); 

这是O(1)对吗?

我的铅说,这是一个更有效的方式来做到这一点,它对我有意义,但它似乎有点空,作为值在hashmap和存储元素中的值作为键。

我的问题是,这是一个好的方法吗?效率节拍ArrayList#包含或一般的数组搜索。有用。
我的担心是,我没有看到任何人在搜索后这样做。我可能在某个地方失去一个明显的问题,但我看不到它。

由于您有一组唯一值,因此集合是适当的数据结构。你可以把你的值放在HashSet中,这是Set接口的一个实现。

My lead said this was a more efficient way to do this and it made sense to me, but it just seemed a bit off to put null/empty as values in the hashmap and store elements in it as keys.

铅的建议是有缺陷的。地图不是正确的抽象为此,集是。地图适用于键值对。但你没有价值观,只有钥匙。

用法示例:

Set<String> users = new HashSet<>(Arrays.asList("Alice", "Bob"));

System.out.println(users.contains("Alice"));
// -> prints true

System.out.println(users.contains("Jack"));
// -> prints false

使用Map会很尴尬,因为值的类型应该是什么?这个问题在你的用例没有意义,
因为你只有键,而不是键值对。
有了一套,你不需要问,使用是完全自然的。

This is O(1) right?

是的,在HashMap或HashSet中搜索是O(1)摊销的最坏情况,而在列表或数组中搜索是O(n)最坏的情况。

一些注释指出,HashSet是按照HashMap实现的。
这很好,在那个抽象层次。
在任务的抽象层次—
存储唯一用户名的集合,
使用集合是一个自然的选择,比地图更自然。

http://stackoverflow.com/questions/38691454/is-it-a-good-idea-to-store-data-as-keys-in-hashmap-with-empty-null-values

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 在HashMap中使用空/空值存储数据是一个好主意吗?