`
dandy
  • 浏览: 67272 次
  • 性别: 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. **猜古代名字游戏逻辑** - **数据结构**:游戏可能包含一个古代名字数据库,存储了多个古代人物的名字,这些数据可能以数组或列表的形式存在。 - **随机选择**:游戏会随机选取数据库中的一个名字作为答案,这...

    口语交际:名字里的故事.docx

    接着,教师鼓励学生分享自己的名字,通过猜名字游戏的方式增加趣味性,同时也让学生在游戏中学习到名字可能包含的文化、寓意和父母的期望。例如,奥运福娃的名字不仅反映了中国传统文化,还寓含了对运动和友谊的赞美...

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

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

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

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

    户外集体游戏大全——破冰游戏.pdf

    1. **串名字游戏**:这个游戏要求小组成员围成一圈,按照顺序介绍自己,并在介绍中包含前一位成员的信息。这种方式有助于大家快速记住彼此的名字和身份,从而拉近关系,活跃氛围。 2. **面对面的介绍**:参与者排成...

    室内游戏大全.doc

    1. **串名字游戏**:帮助大家记住彼此的名字,提升团队熟悉度。 2. **面对面的介绍**:通过音乐和转向,促使团队成员互相了解。 3. **天气预报**:利用身体动作模拟不同天气,活跃气氛。 4. **抓手指游戏**:结合...

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

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

    12个经典的课前热身小游戏.doc

    1. **串名字游戏**:这是一种帮助成员熟悉彼此名字的游戏。每个人依次介绍自己,并重复前面所有人的名字。这种游戏可以促进记忆和团队成员之间的联系。 2. **面对面的介绍**:参与者围成两个同心圆,随着歌曲转动,...

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics