Ric*_*ick 5 java hashmap dataset
请原谅我对Java的新手,因为我没有足够的经验知道最有效的方法.我有一个类似下面的hashmap,但它有40,000个条目:
Map <String, String> someHashmap = new HashMap <String, String> ();
someHashmap.put("filepath1", null);
someHashmap.put("filepath2", "tag1");
someHashmap.put("filepath3", "tag2");
Run Code Online (Sandbox Code Playgroud)
我想确定有多少值匹配,null以便我可以确定是否为null.当然我可以做一个常规循环来检查,但我想知道是否有更有效的方式,谢谢
Mik*_*wis 12
您可以使用以下containsValue方法:
如果此映射将一个或多个键映射到指定值,则返回true.
somHashmap.containsValue(null);
Run Code Online (Sandbox Code Playgroud)
但请记住,如果你有一个大型数据集(而且似乎你有),你应该创建一个单独的数据结构来跟踪允许O(1)查找时间而不是O(n)时间的值. ,如其他答案所示.
这是一个替代解决方案,专为速度而设计。
调用您的原始 HashMap a。等一下HashMap<String, Integer> aCount。该aCount哈希表将要存储的每个值的多是如何在你原来的哈希表的计数。
每次将键k和值v插入到第一个中时HashMap,请检查是否aCount.containsKey(v). 如果是,则增加值:aCount.put(v, aCount.get(v) + 1)。否则,添加一个新条目:aCount.put(v, 1)。
每次从第一个中删除键k和值时,请使用. 如果计数大于 1,则用于递减计数。否则(即计数正好是一)使用.vHashMapaCount.get(v)aCount.put(v, aCount.get(v) - 1)aCount.remove(v)
然后,您只需要调用aCount.contains(v)来确定给定的值是否在您的 HashMap 中a。
为什么要做这一切?因为,通过这种方式,无需 O(n) 查询时间来确定 HashMap 中是否存在某个值,而是获得 O(1) 时间。如果这对您有价值,那么上述解决方案将起作用。如果这对您来说无关紧要,那么您可以轻松使用 Mike Lewis 的答案。
| 归档时间: |
|
| 查看次数: |
11135 次 |
| 最近记录: |