`
dandy
  • 浏览: 67959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

名字游戏

    博客分类:
  • java
阅读更多
出自《java puzzle》

下面的程序将两个映射关系放置到了一个映射表中,然后打印它们的尺寸。那么,它会打印出什么呢?

import java.util.*;
public class NameGame {
public static void main(String args[ ]) {
Map<String, String> m =
new IdentityHashMap<String, String>();
m.put("Mickey", "Mouse");
m.put("Mickey", "Mantle");
System.out.println(m.size());
}
}

对该程序的一种幼稚的分析认为,它应该打印1。该程序虽然将两个映射关系放置到了映射表中,但是它们具有相同的键(Mickey)。这是一个映射表,不是一个多重映射表,所以棒球传奇人物(Mickey Mantle)应该覆盖了啮齿类动画明星(Mickey Mouse),从而只留下一个映射关系在映射表中。
更透彻一些的分析会对这个预测产生质疑。IdentityHashMap的文档中叙述道:“这个类用一个散列表实现了Map接口,它在比较键时,使用的是引用等价性而不是值等价性”[Java-API]。换句话说,如果第二次出现的字符串字面常量“Mickey”被计算出来是与第一次出现的“Mickey”字符串不同的String实例的话,那么该程序应该打印2而不是1。如此说来,该程序到底是打印1,还是打印2,抑或是其行为会根据不同的实现而有所变化?
如果你试着运行该程序,你就会发现,尽管我们那个幼稚的分析是有缺陷的,但是该程序正如这种分析所指出的一样,打印出来的是1。这是为什么呢?语言规范保证了字符串是内存限定的,换句话说,相等的字符串常量同时也是相同的[JLS 15.28]。这可以确保在我们的程序中第二次出现的字符串字面常量“Mickey”引用到了与第一次相同的String实例上,因此尽管我们使用了一个IdentityHashMap来代替诸如HashMap这样的通用目的的Map实现,但是对程序的行为却不会产生任何影响。我们那个幼稚的分析忽略了两个细节,但是这些细节造成的影响却彼此有效地抵消了。
本谜题的一个重要教训是:不要使用IdentityHashMap,除非你需要其基于标识的语义;它不是一个通用目的的Map实现。这些语义对于实现保持拓扑结构的对象图转换(topology-preserving object graph transformations)非常有用,例如序列化和深层复制。我们得到的次要教训是字符串常量是内存限定的。
2
0
分享到:
评论

相关推荐

    HTML5小游戏【岛国么么哒-猜图游戏-猜名字游戏】游戏源码分享下载 - daoguo.zip

    猜名字游戏】游戏源码分享下载 --- daoguo.zipHTML5小游戏【岛国么么哒--猜图游戏-猜名字游戏】游戏源码分享下载 --- daoguo.zipHTML5小游戏【岛国么么哒--猜图游戏-猜名字游戏】游戏源码分享下载 --- daoguo....

    常用的团队破冰游戏:串名字游戏_文秘知识.docx

    首先,“串名字游戏”是一种简单而高效的破冰方式,特别适用于团队初次聚集或培训伊始。在这个游戏中,每位参与者依次进行自我介绍,并重复前一位成员的名字及单位。通过这样的互动,成员们不仅能更快地记住彼此的...

    名字小游戏

    【名字小游戏】是一款休闲娱乐的小程序,旨在提供轻松愉快的游戏体验。通过这个游戏,玩家可以以自己的名字为角色,参与各种有趣的挑战,增加互动性和个性化。这款游戏的独特之处在于它将个人的名字融入游戏流程,...

    名字PK游戏的C#源码

    "名字PK游戏"是一款简单的基于C#编程语言的窗体应用程序,主要展示了C#的基础语法和Windows Forms的应用。下面将详细解析这个项目中涉及的知识点。 1. **C#编程语言基础** C#是微软开发的一种面向对象的编程语言,...

    70万中文网名,游戏名,名字数据库

    70万中文网名,游戏名,名字数据库。随机名字库

    6_40个经典室内破冰游戏活动团建模板.doc

    1. **串名字游戏**:这个游戏有助于快速记忆团队成员的名字和他们的身份。每个人轮流介绍自己,后面的人需要重复前面所有人的名字,以此加深记忆,促进团队成员间的熟悉度。 2. **面对面的介绍**:参与者围成两个同...

    新员工入职培训团队互动游戏.doc.doc

    串名字游戏是一种简单而有趣的活动,旨在帮助新员工熟悉彼此的名字和背景。游戏规则如下: - 小组成员围成一圈,第一位成员自我介绍,包括单位和姓名。 - 第二位成员需说出前一位成员的名字和自己的信息,以此类推。...

    心理学游戏破冰游戏大全.pdf

    串名字游戏:小组成员围成一圈,任意提名一位学员自我介绍单位、姓名,第二名学员轮流介绍,但是要说:我是*后面的*,第三名学员说:我是*后面的*的后面的*,依次下去,最后介绍的一名学员要将前面所有学员的名字、...

    心理健康50种团体小游戏.doc

    11. **串名字游戏** - 该游戏有助于记忆他人的名字,促进团队成员间的相互认知和亲近感。 12. **大胃王** - 这个游戏以幽默的方式进行,参与者需记住前人说过的食物,逐渐增加难度,锻炼记忆力和口头表达能力。 ...

    易语言猜测古代名字源码.7z

    3. **猜古代名字游戏逻辑** - **数据结构**:游戏可能包含一个古代名字数据库,存储了多个古代人物的名字,这些数据可能以数组或列表的形式存在。 - **随机选择**:游戏会随机选取数据库中的一个名字作为答案,这...

    大学生团队游戏大全集.doc

    串名字游戏是大学生团队游戏大全集中的第六个游戏。游戏的规则是:小组成员围成一圈,任意提名一位队员自我介绍单位,然后第二名队员轮流介绍,但是要说:我是*后面的*,第三名队员说:我是*后面的*的后面的*,依次...

    培训游戏-游戏集分享.pdf

    4. **串名字游戏** - 目的:这个游戏活跃气氛,促进团队成员间的快速了解。通过依次介绍前面所有人的名字和单位,加深了队员间的记忆和联系。 5. **循环相克令** - 方法:两人通过“猎人、狗熊、枪”的口令和对应...

    我的名字克里桑斯美美.doc

    7. **名字游戏**:教学步骤中的名字变长游戏,是一种创新的教学方法,让孩子在游戏中理解故事,同时也锻炼他们的思维灵活性。 8. **故事延展**:通过后续的故事讲述和自我联系,让孩子们进一步思考自己的名字,了解...

    室内游戏大全.doc

    首先,简单的自我介绍游戏如“串名字游戏”和“面对面的介绍”,都是极佳的破冰工具。在团队中,熟悉彼此是合作的第一步,而这样的游戏能够帮助人们更快地记住同事或朋友的名字与面孔,为后续的交流打下良好的基础。...

    团队培训互动游戏大全.doc

    4. 串名字游戏 - 目的:该游戏旨在活跃氛围,快速增进团队成员间的相互了解。大家围成一圈,依次介绍自己和其他人的名字,到最后,测试记忆力和注意力。这个游戏能帮助新团队成员融入,打破初次见面的尴尬。 5. ...

    小学英语句子操练游戏.doc

    3. **Friend’s name game** - 小朋友的名字游戏 孩子们围成一圈,传递球的同时说出自己和接球人的名字。这个游戏强化了孩子们记忆同伴名字的能力,同时也练习了使用"His name is…"或"Her name is…"的表达方式。 ...

    几个室内团队培训小游戏[整理].pdf

    四、串名字游戏 这是一个简单的游戏,旨在活跃气氛,帮助成员相互了解。每个参与者轮流说出前一个队友的名字及自己的名字,形成一条“名字链”。这个游戏有助于打破团队内部的僵局,促进成员间的交流。 五、循环相...

    室内破冰游戏经典.doc

    首先,我们介绍的是“串名字游戏”。该游戏的核心在于让小组成员围成一圈,依次进行自我介绍,而在介绍的过程中需要提及之前所有人的名字和单位。游戏开始时,每个人可能都觉得这是一个挑战,因为要记住众多新面孔和...

    常用团体心理游戏.pdf

    沟通技巧的重要性在“串名字游戏”中得到了强调。在这个游戏中,团队成员需要记住其他成员的名字,并能够正确地表达出来。这个游戏能够帮助提升个体的口头表达能力和倾听能力,同时增进团队成员之间的相互了解。 ...

Global site tag (gtag.js) - Google Analytics