`
情却然
  • 浏览: 106834 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

哈希表根据值获取键(反转哈希表)

 
阅读更多

昨天下午,有人在扣扣群里问哈希表怎么根据键获取值,我就顺便问了句,怎么根据值获取键呢?结果没人回答我,我知道去帮助文档里自己找了。


首先我找到java.util.HashMap<K, V>类,在里面我找到了这么一个方法:

entrySet() 返回此映射所包含的映射关系的 Set 视图。返回的类型是Set<Map.Entry<K, V>>

其实toString()也能同时获取哈希表的所有键和值,但是返回的类型是String,想要单独获取一个键和一个值就有点麻烦了。

我再点进了Map.Entry<K, V>类,可以看到,有getKey()和getValue()两个方法,这样就能单独的取出每个键和值了。

getKey() 返回与此项对应的键。返回类型为K。
getValue() 返回与此项对应的值。返回类型为V。

那么怎么从set视图中获取每一个Map.Entry<K, V>呢?我再查看了Set类,找到了这个方法:

iterator() 返回在此 set 中的元素上进行迭代的迭代器。返回类型为Iterator<E>

Iterator<E>类中有这么两个方法,那么我们可以通过循环来从迭代器获取Map.Entry<K, V>

hasNext() 如果仍有元素可以迭代,则返回 true。返回类型为boolean
next() 返回迭代的下一个元素。返回类型为E。

这样,我们就可以单独得到每一个键和值了。之后,为了能让键和值重新对应起来,我们可以再把它们重新放进一个新的哈希表,不过我们把键和值反过来,这样,我们就可以从新的哈希表中,根据原本的哈希表的值来获取键了。

public <K, V> HashMap<V, K> reverse(HashMap<K, V> originalMap) {
	HashMap<V, K> reverseMap = new HashMap<V, K>();
	Set<Entry<K,V>> set = originalMap.entrySet();
	Iterator<Entry<K,V>> it = set.iterator();
	while (it.hasNext()) {
		Entry<K,V> entry = it.next();
		reverseMap.put(entry.getValue(), entry.getKey());
	}
	return reverseMap;
}

 
我们来测试一下:


OK!这样就能通过值获取键了~~

 

1
0
分享到:
评论

相关推荐

    VB 哈希表算法演示源码【高级版】.rar

    VB 哈希表算法演示源码【高级版】,常规的(非优化的)VB代码的哈希运算.如果你想使用他们,你需要进一步的优化,以达到更快的效果.并搜集了了一些热门选择散列算法表.从256位开始,我们每个都进行论循计算(见左上)并以16...

    面试中,经常要用到的数据结构(链表、队列、栈、二叉树、哈希表等)以及一些常用的算法

    在IT行业的面试中,数据结构和...例如,链表的反转、二叉树的遍历、队列的应用于任务调度、栈在解决回溯问题中的应用,以及哈希表在解决查找和映射问题中的优势等。熟练掌握这些知识,将大大提高你在面试中的竞争力。

    Inverted-File:从 Cransfield 集合中读取文件集合并创建和反转该集合的文件。 倒排文件存放在一个外部文件(基本上是一个大哈希表)中,适合以后开发的查询程序使用

    避免停用词 术语是大小写折叠的,并使用波特词干提取器对哈希中的任何术语,返回另一个哈希表值,其中包含文档频率(术语出现的文档数量),每个值都包含文档 ID 和术语频率(该词在文档中出现的次数)

    广东工业大学 数据结构 anyview 作业系统 第四章答案

    串的逆序操作是指将一个串反转过来,以便于我们更方便地处理串的操作。在代码实现中,我们使用迭代的方法来实现串的逆序操作。首先,我们定义了一个临时串 t,然后我们使用 for 循环来将原串 s 的每个字符逆序地添加...

    数组和链表(使用场景和反转链表) 数组和链表.pdf

    在实际应用中,除了数组和链表之外,针对不同需求还有多种数据结构的选择,例如栈、队列、树、哈希表等,但无论如何,正确理解数组和链表的原理与适用场景,对于高效的数据处理和算法实现仍然是不可或缺的。...

    链表去重内容介绍.zip

    这种方法利用哈希表的高效查找特性,首先遍历一次链表,将所有元素存入哈希表,然后再次遍历链表,如果当前元素不在哈希表中,则将其添加到新的链表中。这种方法的时间复杂度为O(n),空间复杂度也为O(n)。 2. 双指...

    package hash

    比如,clear可能用于清空哈希表,copy-methods可能提供了复制哈希表的方法,invert可能用于反转键值对关系,is.empty可能用于检查哈希表是否为空,keys和values分别用于获取哈希表的所有键和所有值。 总结来说,...

    leetcode-for-javascript:javascript版的leetcode题解。追求优雅,精确的代码

    目录译文题解标签备注滑动窗口值得一做双指针,字符串,反转哈希表回溯哈希表快慢指针二进制转换值得一做哈希表回归递归哈希表哈希表,桶排序,堆排序哈希表哈希表,桶排序回溯,HashMap哈希表,递归,DFS哈希表字符...

    matlab开发-反转var参数Intomap参数.zip.zip

    而字典则更接近于传统编程语言中的映射或哈希表,通过键来访问对应的值。如果`Intomap`是函数,那么它可能接收一个整数作为输入,然后返回与该整数关联的特定值。如果它是结构体或字典,那么可能是通过整数索引来...

    HashMap通过VALUE反向求KEY的方法

    每个Map.Entry对象代表一个键值对,并提供了`getValue()`和`getKey()`方法,分别用于获取键和值。为了找到与给定值相匹配的键,我们遍历这个Set集合,比较每个Entry的值与目标值是否相等。如果相等,就将对应的键...

    常见:算法笔试或面试题1

    5. 找共同 URL:使用哈希表,首先将 a 文件的 URL 存入哈希表,然后遍历 b 文件,查找哈希表中是否存在,不存在则写入新文件,存在则从哈希表中删除,当哈希表元素较少时,重新哈希 a 文件的 URL。 6. 兄弟单词:将...

    算法大全-面试题-数据结构.docx

    首先遍历第一个链表,并将每个节点存储在哈希表中,然后遍历第二个链表,如果第二个链表中的节点在哈希表中存在,则两个链表相交。 10. 两个单链表相交的计算 可以使用哈希表来解决这个问题。首先遍历第一个链表,...

    力扣500题刷题笔记4

    本文主要探讨了两个与链表相关的编程问题,它们均来源于LeetCode的热门题目。第一个问题是206....通过解决这些问题,程序员可以提升对链表操作、哈希表和双链表的理解,以及如何在实际场景中应用这些数据结构。

    数据结构 anyview 答案 作业系统 第四章答案

    练习可能要求实现链表的基本操作,如插入、删除、反转或者查找特定元素。 3. **CH04-EX13**:栈(LIFO - 后进先出)和队列(FIFO - 先进先出)是两种常用的数据结构。这个练习可能涉及到栈的压入、弹出操作,或者...

    可反转排序的泛型字典类

    然而,标准的`Dictionary, TValue&gt;`类并不支持直接的排序操作,因为它内部是基于哈希表实现的,其元素的顺序通常是无序的。在某些情况下,我们可能需要一个可以根据特定条件排序的字典,这就是"可反转排序的泛型字典...

    Javapython for leetcode 1 array2 list3 string4 hashtable5 m.zip

    4. **哈希表(字典)**:哈希表是一种高效的数据结构,它通过散列函数将键映射到数组索引,实现快速查找、插入和删除。在Java中,常见的哈希表实现是HashMap,在Python中则是字典。哈希表在LeetCode中常用于解决计数...

    数据结构测试题.rar

    7. **哈希表**:哈希表通过哈希函数将键映射到数组的索引,提供快速的查找、插入和删除操作。测试题可能要求实现哈希表并解决哈希冲突,或者设计高效的哈希函数。 除了这些基本数据结构,测试题还可能包含关于数据...

    数据结构复习之链表

    而在哈希表中,链表可以解决哈希冲突问题,将相同哈希值的元素链接在一起。 在LeetCode等算法训练平台中,链表相关的题目非常常见,它们考察了对链表操作的理解和应用,如合并两个有序链表、反转链表、判断链表是否...

    LeetCode 精选 TOP 面试题(6)1

    本题主要涉及了LeetCode中的热门面试题,包括了字符串反转、计数排序、哈希表的应用以及位运算求两整数之和等知识点。下面将逐一进行详细解析。 1. **字符串反转**(344. 反转字符串) - **思路与方法**:双指针...

Global site tag (gtag.js) - Google Analytics