`
xtwxgh
  • 浏览: 4319 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

这个题真实变态 怎么改呐!!!

阅读更多
/**补充完该类,不修改main方法,使得get()方法可以取到值*/
package test;

import java.util.HashMap;
import java.util.Map;

public class StudentTest {
private static final class Student {
private static String name;

public Student(String name) {
this.name = name;
}

}


public static void main(String[] args) {
Map p = new HashMap();
p.put(new Student("lily"), "sister");
System.out.println(p.get("lily"));
System.out.print(p.keySet().iterator().next());
}
}
分享到:
评论
15 楼 抛出异常的爱 2007-05-10  
重写jvm中的string
equles(){
return true;
}
为什么不能满足?
14 楼 arthurln 2007-05-10  
jdk1.5是实现不了,因为:
1、在hashmap中是的get方法中是这样写的:
    if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
       return e.value;

e.hash = hash 可以通过重载student的hashCode()方法满足。
但是第二个条件,好像不能满足。
这里key是一个String “lily”,但是k是一个V型的数据。在String的equals方法中这样写的:
    public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

因为k既不是String对象,和”lily”又不是同一个引用,所以无法满足。
13 楼 kdekid 2007-05-10  
在 Effective Java 里面提过这种应该被禁止的做法。正常情况下,是不应该 override hashCode 和 equals 的
12 楼 javatestscm 2007-05-10  
这个是想考HASHCODE()和EQUALS(),不过题出的有点问题。在JDK1.5下是出不来结果的。
if (e.hash == hash && eq(k, e.key)) 
                return e.value;

11 楼 dovecat 2007-05-10  
...equals和hashcode对于想放入Collection等东东的对象要配套写...
10 楼 抛出异常的爱 2007-05-10  
ddy
忘记写这个方法了。
equals()
9 楼 xtwxgh 2007-05-10  
通过统一定义equals()和hashCode(),
可以提升类作为基于散列的集合中的关键字的使用性
怎样写这两个方法呐?
8 楼 ddandyy 2007-05-10  
走到了   是这句

if (e.hash == hash && eq(k, e.key))
7 楼 ddandyy 2007-05-10  
翻了一下 没找到类似语句

    public Object get(Object key) {
        Object k = maskNull(key);
        int hash = hash(k);
        int i = indexFor(hash, table.length);
        Entry e = table[i]; 
        while (true) {
            if (e == null)
                return e;
            if (e.hash == hash && eq(k, e.key)) 
                return e.value;
            e = e.next;
        }
    }

    public Object put(Object key, Object value) {
        Object k = maskNull(key);
        int hash = hash(k);
        int i = indexFor(hash, table.length);

        for (Entry e = table[i]; e != null; e = e.next) {
            if (e.hash == hash && eq(k, e.key)) {
                Object oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, k, value, i);
        return null;
    }




刚开始怀疑是 indexFor 返回的不一样  可是test了一下 都是10


debug了一下
第一个情况  table里面是 Test$Student@32afca=sister
第二个情况  table里面是 lily=sister
6 楼 抛出异常的爱 2007-05-10  
if(!(obj instanceof Test)) return false;
大约map先作这件事
public Object get(Object key) {
    Object k = maskNull(key);
    int hash = hash(k);
    int i = indexFor(hash, table.length);
    Entry e = table[i];
    while (true) {
       if (e == null)
           return e;
       if (e.hash == hash && eq(k, e.key))
           return e.value;
       e = e.next;
    }
 }

static int hash(Object x) {
     int h = x.hashCode();
     h += ~(h << 9);
     h ^= (h >>> 14);
     h += (h << 4);
     h ^= (h >>> 10);
     return h;
 } 
5 楼 ddandyy 2007-05-10  
	private static final class Student {
		private static String name;

		public Student(String name) {
			this.name = name;
		}
		
		public int hashCode() {
			return this.name.hashCode();
		}

	}


试了一下

		Map p = new HashMap(); 
		Student tt = new Student("lily");
		p.put(tt, "sister");
		System.out.println(p.get("lily"));


null

		Map p = new HashMap(); 
		Student tt = new Student("lily");
		p.put(("lily", "sister");
		System.out.println(p.get("lily"));

sister

why???????
4 楼 抛出异常的爱 2007-05-10  
hashCode(){
return name.hashCode();
}
3 楼 xtwxgh 2007-05-10  
请问能详细一点吗?
是重写Student类的hashCode()方法吗?
2 楼 Godlikeme 2007-05-10  
hashcode
1 楼 xtwxgh 2007-05-10  
SORRY!  System.out.print(p.keySet().iterator().next()); 应该去掉

相关推荐

    php非常变态的面试题

    5. foreach 循环:foreach 循环中,如果使用 &,则是对原变量操作,如果不使用 &,则是先生成一个新变量,然后给这个变量复制,最后操作的是这个新变量。 6. 浮点数概念:浮点数是近似值,不是精确值。在这个例子中...

    微软的面试题超变态但是很经典

    ### 微软的面试题超变态但是很经典 在IT行业,尤其是软件开发领域,大公司的面试题目往往具有一定的挑战性和趣味性。微软作为全球知名的科技企业,在招聘过程中也经常设置一些富有创意且考验逻辑思维能力的问题。接...

    微软的面试题及答案-超变态但是很经典.rar

    无论是数学题、编程题还是逻辑推理题,都需要通过大量的练习来熟练掌握,而这份资料则是一个很好的起点。同时,解题后反思和总结也是必不可少的,这样可以在不断试错的过程中提升自我,使自己在面试中更有信心。

    JAVA变态面试试题.rar

    "JAVA变态面试试题"显然是一份集合了这类高难度问题的文档,旨在帮助应聘者准备面试。 这份文档可能包含以下几大类知识点: 1. **基础语法**:面试中通常会考察对基本语法的掌握,如封装、继承、多态等面向对象...

    变态测试题HTML5游戏源码

    通过研究和实践这个"变态测试题HTML5游戏源码",开发者可以深入理解HTML5游戏开发的关键技术,提高编程技巧,并可能启发新的创意和设计思路。无论是初学者还是有经验的开发者,都可以从中受益匪浅。

    变态版java笔试试题

    Java 笔试试题变态版知识点总结 Java 笔试试题变态版是 Java 开发者面试的常见题目,涵盖了 Java 基础知识、垃圾收集器、字符串、Math 函数、线程、数组、多态性、Set 集合等方面。 一、垃圾收集器(GC) 垃圾...

    变态智力题大全.docx

    变态智力题大全.docx

    java面试32变态题

    ### Java面试32变态题详解 #### 一、final, finally, finalize的区别 - **final**: 关键字,用于修饰类、方法或变量。如果一个类被声明为final,则该类不能被继承;如果方法被声明为final,则该方法不能在子类中被...

    2021年自考《变态心理学》模拟试题及答案(卷五).pdf

    变态心理学是心理学的一个分支学科,它主要研究心理障碍的产生原因、发展规律以及治疗方法。在变态心理学的研究中,适应不良行为是一个核心概念,指的是那些对个体产生生理伤害、情感痛苦或生活干扰,甚至导致个体与...

    变态玛丽fancy修改版以及源码

    《变态玛丽fancy修改版及源码》是一个独特的游戏作品,源自经典的马里奥游戏,但经过FANCY的创新性改动,呈现出全新的视觉风格和游戏体验。此压缩包包含了两个主要内容:游戏本身和源代码。 首先,让我们来探讨一下...

    变态玛丽FANCY阿鑫修改版

    在这个压缩包文件中,"变态玛丽FANCY阿鑫修改版"可能是游戏的所有文件集合,包括游戏程序、图像资源、音频文件以及可能的游戏配置文件等。玩家解压后,可能需要运行特定的执行文件来启动游戏,或者可能需要安装到...

    微软面试题 超牛超变态的微软面试题

    在一张纸上标记9个点,要求在这9个点上画出10条直线,每条直线上至少要有三个点。 **解答思路**: 1. **布局方案**:可以通过特殊的点阵布局来实现这一目标。 2. **示例方案**:将9个点排列成3×3的方格形式,然后...

    小游戏源码-变态测试题.rar

    【描述】"小游戏源码-变态测试题.rar"提示我们这个RAR压缩文件里包含了小游戏的源代码,RAT是一种常见的文件压缩格式,用于打包和存储多个文件或目录。开发者可以通过查看、编辑或学习这些源代码来理解游戏的运行...

    变态的java面视题(全)

    这里我们探讨的“变态的Java面试题”可能是指那些具有挑战性、需要深入思考的问题,它们通常涉及到Java语言的核心概念、并发编程、集合框架、内存管理以及JVM(Java虚拟机)的工作原理等多个方面。 首先,Java是一...

    三级心理咨询师—变态心理学模拟试题A卷含答案.docx

    这篇文档提供了一份三级心理咨询师变态心理学的模拟试题,涵盖了多个方面的知识点。 1. 幻觉的分类:幻觉分为真性幻觉和假性幻觉,真性幻觉是患者在客观现实中感知到不存在的事物;假性幻觉则是产生于主观空间内,...

    H5小游戏源码 变态测试题.zip

    这个压缩包中的源码可能是用于一个趣味性的“变态测试题”游戏,可能包含一些智力挑战或心理测试的元素,旨在娱乐和测试玩家的思维敏捷度。 HTML5是万维网联盟(W3C)发布的新一代超文本标记语言标准,它扩展了...

    python-剑指offer第9题变态跳台阶

    python python_剑指offer第9题变态跳台阶

    心理咨询师考证《变态心理学与健康心理学》练习题(一)含答案.docx

    古代“变态心理学”的发端可以追溯到公元前400年,那时已经显现出了“心理是脑的功能”这一科学思想的雏形,与古希腊的体液学说有关。随着自然科学的发展,人们开始将心理异常现象与大脑功能联系起来,推动了变态...

    变态版飞信 超强向手机发短信工具

    标题中的“变态版飞信”指的是经过特殊修改或增强功能的飞信软件,飞信是一款由中国移动开发的即时通讯工具,允许用户通过网络免费发送短信到手机,同时也支持语音、视频等多种通信方式。这个“变态版”可能包含了...

Global site tag (gtag.js) - Google Analytics