Java 封装映射的keySet()的时间复杂度<&燃气轮机;价值观
我需要一个带有签名的Java 封装映射的keySet()的时间复杂度<&燃气轮机;价值观,java,map,set,time-complexity,Java,Map,Set,Time Complexity,我需要一个带有签名的HashMap HashMap<Integer, Double> map; 因此,映射变为 Set<CustomKV> customMap; 看起来他们是一模一样的。但我要问的是,如果我一直打电话 for(CustomKV kv : customMap) int key = kv.getKey(); 这会让我慢下来吗,还是Java认识到了这一点,并将customMap视为一个映射?如果类中有两个以上的字段,比如您的示例Set custom
HashMap
HashMap<Integer, Double> map;
因此,映射
变为
Set<CustomKV> customMap;
看起来他们是一模一样的。但我要问的是,如果我一直打电话
for(CustomKV kv : customMap)
int key = kv.getKey();
这会让我慢下来吗,还是Java认识到了这一点,并将
customMap
视为一个映射?如果类中有两个以上的字段,比如您的示例Set customMap代码>
如果只有两个值,最好使用Hashmap
在这两种情况下,我们都可以迭代
但是在Hashmap的情况下,我们可以通过使用键的get
方法访问value
,我们可以避免迭代。如果有两个以上的字段,我们应该去上课,就像在你的例子中那样。设置customMap代码>
如果只有两个值,最好使用Hashmap
在这两种情况下,我们都可以迭代
但是在Hashmap的情况下,我们可以使用key
通过get
方法访问value
,我们可以避免迭代。keySet()
不会创建新的集
它只提供地图中关键点的视图。实际上,它只提供了几个操作:迭代(带删除)、大小、空、清除和包含。您不能向其中添加元素,否则它将抛出一个不支持操作异常
键集()
不会创建新的集
它只提供地图中关键点的视图。实际上,它只提供了几个操作:迭代(带删除)、大小、空、清除和包含。您不能向其中添加元素,否则它将抛出一个不支持操作异常
如果您询问Java的实现,HashMap
会在第一次调用keySet()
后缓存集合。但即使是第一个调用也不需要任何迭代,因为它只返回底层条目集的视图或包装器
因此,是的,Java确实优化了它们的实现,但从技术上讲,您可以对自定义集应用相同的优化。如果您询问Java的实现,HashMap
会在第一次调用keySet()
后缓存该集。但即使是第一个调用也不需要任何迭代,因为它只返回底层条目集的视图或包装器
因此,是的,Java确实优化了它们的实现,但从技术上讲,您可以对自定义集应用相同的优化。您希望访问哪些值?使用CustomKV类而不是Map的原因是什么?如果使用customSet
,您会调用什么
方法。@MKorsch我正在使用它来建模图中顶点的邻接列表。为什么迭代Set
比迭代Set
效率更高或更低?您想访问哪些值?使用CustomKV类而不是Map的原因是什么?如果使用customSet
,您会调用什么
方法。@MKorsch我正在使用它来建模图中顶点的邻接列表。为什么迭代集
的效率会比迭代集的效率高或低?
for(Integer i : map.keySet())
for(CustomKV kv : customMap())
for(CustomKV kv : customMap)
int key = kv.getKey();