Java与C ++中的哈希

Java和C ++在语法上有些相似,但是随着时间的流逝而发生了变化。Java受到C ++的宽松启发,但最初并未采用C ++的模板结构,也不需要C ++的头文件/内容文件分离,并且当然,它使用JVM并编译为字节码而不是机器码。

从那时起,这两种语言在某种程度上融合了起来-它们遵循相似的编码准则,支持Lamda构造,泛型/模板,循环语法的多个相同形式,等等。但是,现代用途肯定存在差异。C ++模板支持专业化,而Java泛型支持类型限制。它们也具有相似的基本集合类型。

哈希表,哈希图和类似类型的数据结构,这些数据结构允许通过唯一键进行索引,但是该索引是以非常特定的方式实现的。现在,任何关联的容器类型都可以让你通过特定键访问数据。例如,你可以使用链表作为存储结构,也可以使用双链表或二叉树。哈希表本质上使用数组,但是该数组由哈希值索引。Java具有作为类的基本关联容器类型   java.util.HashMapC ++   std::unordered_map

基于哈希的容器在数据存储方面具有明显的优势。当使用具有低冲突可能性的哈希生成器时,两个容器(HashMap   unordered_map)都具有O1)查找性能。碰撞的可能性越大,容器的性能就越接近On),其中n是存储在容器中的元素数。这两个容器也都使用标准的哈希函数-Java需要键来实现Comparable并通过Map.Entry实现hashCode()方法。对于普通用途,它们也非常相似。

对于C ++程序,你将包含以下内容:

Java与C ++中的哈希_第1张图片

在Java中做类似的事情:

Java与C ++中的哈希_第2张图片

访问变量也是如此:

在Java中:

除了放置/获取以外,哈希结构还有其他常见用途。另一个典型用途是存储字符串键和与这些键关联的特定值,其中键具有某种语义值(例如,名称)。当你执行这种操作时,通常需要获取一组键,然后可以对其进行处理以找到特定的值。这种操作如下所示:

Java与C ++中的哈希_第3张图片

再次在Java中:

Java与C ++中的哈希_第4张图片

我们确实有一些C ++的想法在蔓延,特别是在循环中使用引用对象。不过,两种语言之间的情况非常相似。

我要看的最后一种情况是如何在地图的所有元素上应用算法。首先,C ++:

Java与C ++中的哈希_第5张图片

然后是Java:

Java与C ++中的哈希_第6张图片

Java版本肯定有点麻烦。这两种方法在设计理念上也显示出明显的差异。

C ++版本使用标准库中的外部算法,以便将lambda表达式应用于映射中的对。在现代C ++中,使用严格的以类型为中心的角度来设计类。在这里,该for_each(.)算法可以应用于任何数量的容器,并以此方式进行设计。此外,由于它不是unordered_map类型固有的   ,因此实际上被定义为外部函数。HashMap另一方面,Java 类包含该forEach()方法。

无论如何,这是对Java和C ++哈希映射类型的常见操作的简要概述,着重强调了两者之间的一些相似之处和不同之处。

有什么问题可以加下qq:2062583349。也可添加vx:admindesire,有java、python、web等习资料和视频课程干货”。欢迎交流!

你可能感兴趣的:(c++,java)