Java和C ++在语法上有些相似,但是随着时间的流逝而发生了变化。Java受到C ++的宽松启发,但最初并未采用C ++的模板结构,也不需要C ++的头文件/内容文件分离,并且当然,它使用JVM并编译为字节码而不是机器码。
从那时起,这两种语言在某种程度上融合了起来-它们遵循相似的编码准则,支持Lamda构造,泛型/模板,循环语法的多个相同形式,等等。但是,现代用途肯定存在差异。C ++模板支持专业化,而Java泛型支持类型限制。它们也具有相似的基本集合类型。
哈希表,哈希图和类似类型的数据结构,这些数据结构允许通过唯一键进行索引,但是该索引是以非常特定的方式实现的。现在,任何关联的容器类型都可以让你通过特定键访问数据。例如,你可以使用链表作为存储结构,也可以使用双链表或二叉树。哈希表本质上使用数组,但是该数组由哈希值索引。Java具有作为类的基本关联容器类型 java.util.HashMap
。C ++有 std::unordered_map
。
基于哈希的容器在数据存储方面具有明显的优势。当使用具有低冲突可能性的哈希生成器时,两个容器(HashMap
和 unordered_map
)都具有O(1)查找性能。碰撞的可能性越大,容器的性能就越接近O(n),其中n是存储在容器中的元素数。这两个容器也都使用标准的哈希函数-Java需要键来实现Comparable并通过Map.Entry
实现hashCode()
方法。对于普通用途,它们也非常相似。
对于C ++程序,你将包含以下内容:
在Java中做类似的事情:
访问变量也是如此:
在Java中:
除了放置/获取以外,哈希结构还有其他常见用途。另一个典型用途是存储字符串键和与这些键关联的特定值,其中键具有某种语义值(例如,名称)。当你执行这种操作时,通常需要获取一组键,然后可以对其进行处理以找到特定的值。这种操作如下所示:
再次在Java中:
我们确实有一些C ++的想法在蔓延,特别是在循环中使用引用对象。不过,两种语言之间的情况非常相似。
我要看的最后一种情况是如何在地图的所有元素上应用算法。首先,C ++:
然后是Java:
Java版本肯定有点麻烦。这两种方法在设计理念上也显示出明显的差异。
C ++版本使用标准库中的外部算法,以便将lambda表达式应用于映射中的对。在现代C ++中,使用严格的以类型为中心的角度来设计类。在这里,该for_each(.)
算法可以应用于任何数量的容器,并以此方式进行设计。此外,由于它不是unordered_map
类型固有的 ,因此实际上被定义为外部函数。HashMap
另一方面,Java 类包含该forEach()
方法。
无论如何,这是对Java和C ++哈希映射类型的常见操作的简要概述,着重强调了两者之间的一些相似之处和不同之处。
有什么问题可以加下qq:2062583349。也可添加vx:admindesire,有java、python、web等习资料和视频课程干货”。欢迎交流!
来源:CSDN
作者:欲诺轻狂
链接:https://blog.csdn.net/qq_45865525/article/details/104717635