首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我尝试使用(从keySet())打印每个键时,为什么我会得到对象地址?

当你尝试使用(从keySet())打印每个键时,得到的是对象地址,而不是键的值,是因为在Java中,键的值是通过键对象的toString()方法来表示的。当你直接打印一个对象时,实际上是调用了该对象的toString()方法来获取其字符串表示形式。默认情况下,Object类的toString()方法会返回对象的地址。

如果你想要打印键的值而不是对象地址,你可以使用键对象对应的值来获取键的值,例如使用Map的get()方法来获取键对应的值,然后打印该值。

以下是一个示例代码:

代码语言:txt
复制
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");

Set<String> keys = map.keySet();
for (String key : keys) {
    String value = map.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

在上述代码中,我们通过使用Map的get()方法来获取键对应的值,然后打印键和值的信息。

对于这个问题,腾讯云没有特定的产品或者链接地址与之相关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【译】怎样修改 HashMap 的 Key?

概述 在 Java 中,HashMap 是一个广泛使用的数据结构,它以键值对的形式存储元素,提供快速的数据访问和检索。有时,在使用 HashMap ,我们可能想要修改现有条目的。...它删除了为“Kai”的条目,取出其值(42),并添加了一个新的条目“Eric” -> 42。 当我们运行测试,它通过了。所以,这种方法如我们所期望的那样工作。...然而,对象 Player(“Eric”) 存在于 map 中作为一个: // 虽然Player("Eric")存在: long ericCount = myMap.keySet() .stream(...当我们检索一个条目,例如通过使用 get(key)方法,HashMap 计算给定对象的哈希码,并在哈希表中查找哈希码。 在上面的例子中,我们将 kai(“Kai”) 放入 map 中。...此外,我们通过一个例子讨论了为什么我们应该避免在 HashMap 中使用可变对象作为,以及为什么我们永远不应该修改 HashMap 中的

67631
  • 21个Java Collections面试问答

    您可以其索引访问任何元素。该列表更像是具有动态长度的数组。 一个Map是映射到值的对象。映射不能包含重复的每个最多可以映射到一个值。...迭代器允许调用者基础集合中删除Enumeration无法实现的元素。迭代器方法名称已得到改进,以使其功能更清晰。 9、为什么没有像Iterator.add()这样的方法将元素添加到集合中?...每当我尝试获取下一个元素,迭代器fail-fast属性都会检查基础集合的结构是否有任何修改。如果找到任何修改,则抛出ConcurrentModificationException。...阈值是容量乘以负载因子,并且如果Map大小大于阈值,则每当我尝试添加条目,HashMap都会将Map的内容重新映射为容量更大的新数组。...HashMap使用Key对象的hashCode()和equals()方法来确定放置键值对的索引。当我尝试HashMap中获取价值,也会使用这些方法。

    2K40

    为什么java中的 HashMap 的加载因子是0.75?

    当我们向HashMap中插入一个键值对时,HashMap会计算的哈希码,并根据哈希码找到对应的存储位置。如果两个的哈希码相同,我们称之为哈希碰撞(Hash Collision)。...当加载因子较低,哈希表的每个存储位置上的键值对较少,哈希碰撞的概率就相对较低。这样可以提高HashMap的性能,减少查找、插入和删除操作的时间复杂度。节约内存空间较高的加载因子可以节约内存空间。...当加载因子较高,HashMap可以容纳更多的键值对而不需要进行扩容。这样可以减少扩容操作对性能的影响,并降低内存的使用。...你可以尝试修改示例代码中的加载因子,并观察HashMap的行为变化。一个实际的应用场景是使用HashMap来统计一段文本中单词的出现次数。...我们使用正则表达式去除单词中的标点符号和空格,并将单词转换为小写。然后,我们遍历单词数组,对每个单词进行统计。

    21320

    关于python字典类型最疯狂的表达方式

    这个子字典是哪里来的 当python处理我们的字典表达式,它首先构造一个新的空字典对象;然后按照字典表达式给出的顺序赋和值。...在最开始的例子中,你也可以看到最初的 对象一直都没有被替换。因此,字典的字符串表示仍然打印为以 为(而不是1或1.0)。...当我第一次看到这个令人惊讶的字典表达式,我的直觉是这个结果与散列冲突有关。 哈希表中键的存储是根据每个的哈希值的不同,包含在不同的“buckets”中。...如果两个具有相同的哈希值,那就称为哈希冲突(hash collision),这是在哈希表插入和查找元素需要处理的特殊情况。 基于这个结论,哈希值与我们字典表达中得到的令人意外的结果有很大关系。...: 在CPython中, 函数返回的是一个对象在内存中的地址,并且是确定唯一的。

    1.1K100

    数据结构思维 第十三章 二叉搜索树

    现在我会展示结果,findNode开始: private Node findNode(Object target) { // some implementations can handle null...我使用递归编写了这个方法,使它更易于阅读,但它可以直接用迭代重写一遍,你可能想留作练习。 13.4 中序遍历 我要求你编写的最后一个方法是keySet,它返回一个Set,按升序包含树中的。...让我们看看,当我们以升序添加时会发生什么。...每次我们调用它,我们得到一个更大的数字。当我们将这些时间戳转换为字符串,它们按字典序增加。...13.7 更多练习 在上一个练习中,你不必实现remove,但你可能需要尝试。如果树中央删除节点,则必须重新排列剩余的节点,来恢复 BST 的特性。

    27010

    【小家java】HashMap原理、TreeMap、ConcurrentHashMap的原理、性能、安全方面大解析-----看这一篇就够了

    例如上述对比测试中,当key是最简单的数值字符串keySet可能反而会更高效,耗时比entrySet少10%。总体来说还是推荐使用entrySet。...只遍历keykeySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间 只遍历value使用vlaues方法是最佳选择 综上:lambda遍历是首选。...也就是说,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。...相比HashMap,WeakHashMap中的是“弱”,当“弱”被GC回收,它对应的键值对也会被WeakHashMap中删除;而HashMap中的是强。   ...,即可得到元素的总个数; HashTable使用一把锁处理并发问题,当有多个线程访问,需要多个线程竞争一把锁,导致阻塞

    1.1K10

    第十九天 集合-Map接口容器工具类集合框架总结【悟空教程】

    1.1.3 Map的常用方法 Map(HashMap)的使用:创建对象加入两个泛型。 Map key - 此映射所维护的的类型 value - 映射值的类型 ?...2.遍历的Set集合,得到每一个 3.根据,获取所对应的值 ?...Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以每一个键值对(Entry)对象中获取对应的与对应的值。 ?...2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象 3.通过键值对(Entry)对象,获取Entry对象中的与值。 ? ?...14.List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于 Set,而不关心它的序否则应该使用List)。

    1.1K30

    Java基础系列(三十八):集合总览

    但是我个人认为 Map并不能说是一个集合,称之为映射或许更为合适,因为它的 KeySet视图是一个 Set类型的集,所以我们姑且把它也当做集合。...HashMap来替代,同步的话可以使用ConcurrentHashMap来替代 Iterator 我们接下来聊一下迭代器,鸟瞰图中我们可以看到,所有实现 Collection的子类都继承了 Iterable...这个接口提供了一个 iterator()方法可以构造一个 Iterator接口对象。...然后我们可以使用这个迭代器对象依次访问集合中的元素 迭代器一般使用方法是这样的: Collection c = ......下节预告 接下来,我会陆续带领大家去源码,数据结构等方面去深入了解每一个类,下一节我们要学习 Collection的相关知识,敬请期待~

    47450

    Java核心技术点之集合框架

    通常,迭代一个集合对象的代码是这个样子的: ? Java SE 5.0开始,我们可以使用与以上代码段等价但是更加简洁的版本: ?...只有当我们需要减少在列表中间添加或删除元素操作的代价,可以考虑使用LinkedList。 Set接口 Set接口与List接口的重要区别就是它不支持重复的元素,至多可以包含一个null类型元素。...大概意思是这样的:一个把映射到值的对象被称作一个Map对象。映射表不能包含重复的每个至多可以与一个值关联。...也就是说,keySet方法返回的视图是一个实现了Set接口的对象,这个对象中又包含了一系列对象。...在上面,我们通过包装strings得到一个被检验视图safeStrings。这样在尝试添加非String对象,便会抛出一个ClassCastException异常。

    51710

    JAVA--Map集合详解

    Map集合和Set集合很像,其实Set集合底层就是使用了Map集合。  什么时候使用Map集合:      当数据之间存在映射关系,优先考虑Map集合。 ...将学生(唯一性)作为地址作为值,存入; 3.获取Map集合中的元素。...将学生(唯一性)作为地址作为值,存入; 3.获取Map集合中的元素。...希望打印结果: a(1)c(2)…… 通过结果发现,每一个字母都有对应的次数。 说明字母和次数之间存在映射关系。 什么时候使用Map集合:     当数据之间存在映射关系,优先考虑Map集合。...而且打印结果字母有顺序,所以使用TreeMap集合。 3.遍历字符数组。     将每一个字母作为去查Map集合元素。     如果返回null,将该字母和1存入到Map集合中。

    62110

    数据结构思维 第十章 哈希

    现在,完成这项工作的关键是,我们需要一些方法来查看一个,并决定应该进入哪个映射。当我们put一个新的,我们选择一个映射;当我们get同样的,我们必须记住我们把它放在哪里。...这样,如果我们使用哈希码来存储当我们查找,我们将得到相同的哈希码。 在Java中,每个Object都提供了hashCode,一种计算哈希函数的方法。...我们使用chooseMap的put和get,所以当我们查询的时候,我们得到添加所选的相同映射,我们选择了相同的映射。至少应该是 - 稍后我会解释为什么这可能不起作用。...如果在k个子映射中分配了n个条目,则平均每个映射将有n/k个条目。当我们查找一个,我们必须计算其哈希码,这需要一些时间,然后我们搜索相应的子映射。...如果许多对象具有相同的哈希码,它们将在同一个子映射中。如果一些子映射比其他映射有更多的条目,那么当我们有k个映射,加速比可能远远小于k。

    69420

    HashMap相关(二)

    此实现提供所有可选的映射操作,并允许使用 null 值和 null 。(除了不同步和允许使用 null 之外, HashMap 类与 Hashtable 大致相同。)...(结构上的修改是 指添加或删除一个或多个映射关系的操作;仅改变与实例已经包含的关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。...HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的...因为我们在使用HashMap,希望利用相同内容的对象索引得到相同的目标对象,这就需要HashCode()在此时能够返回相同的值。...还有两条重写HashCode()的原则: 不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即"不为一原则"。

    45750
    领券