作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想实现一个集合(有点像 map ,但针对单个值而不是对值),在搜索其内容时执行散列。我正在努力使我的程序真正高效。目前该程序使用 HashMap 并将数据库中的主键添加到其中两次:
HashMap<Long, Long> userKeys = new HashMap<Long, Long>();
Some operations
userKeys.add(key, key);
我可以使用哈希或映射来避免两次添加 key 吗?由于它是数据库中的主键,我知道不会有重复项,因此我认为哈希是高效的。
我认为 Vector 可能是一个不错的选择,但当我查看 contains() 方法时,它会遍历每个条目,在这种情况下效率会非常低。
我也看过 HashSet,但不幸的是,据我所见,与 HashMaps.get(Object) 方法不同,没有提取值以便使用它们的方法。
所需的设置:
Collection<Long> userKeys = new Collection<Long>();
Some operations
userKeys.add(key);
所需的操作:
userKeys.contains(key)
<- 此处使用哈希
userKeys.get(索引)
最佳答案
我认为 HashSet
是您应该使用的 - 如果您真的没有键/值关系,它应该就是您所需要的。您可以通过遍历集合来获取值。
不清楚您的get(index)
是要返回什么……这里的索引是什么?
如果您需要保留插入顺序,您可以使用 LinkedHashSet
。
如果您需要保留插入顺序并且可以按插入顺序进行随机访问(即通过get(2)
获取您添加的第三个条目),那么您可以保留一个HashSet
和一个 ArrayList
,让两者保持同步。 (将它们封装在一个单独的类型中。)使用 HashSet
进行包含测试,使用 ArrayList
进行随机访问。
关于java - 是否有一个 Java 映射只接受一个条目并允许从映射中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7998657/
我是一名优秀的程序员,十分优秀!