慕村0590769
慕用9095025
参考这个帖子
http://t.csdn.cn/TEFfn
hyjy
蓝布阁
contains() 和 containsKey()都会调用equals()方法
参数为String类型的equals方法和以对象为类型的equals方法不同。
equals(String key)会同时比较地址和内容,其中一个为true的时候返回true。
equals (Object value)只会比较地址是否相同,地址相同的时候返回true。
因此要重写equals方法之后才能使用containsKey方法(否则只会比较地址,而不会比较学生姓名)。containsKey由于参数是String,所有默认的equals就会比较值和地址,就不需要重写了。
fsnh
问题已自我排查解决
森森0515
因为临时new了个Student类的对象。如果是小写只代表已经定义的对象,但这里是直接用
我是好奇这么绕的直接调用new Student(null,name)还有这种操作方法
qq_慕沐4213791
qq_慕用9002516
你是在ListTest里面创建的吧 你得去MapTest里面 才设置好了 public Map<String,Student>students;
qq_慕用9002516
lesson 5.2, 定义了一个Map 对象students

許尔摩斯_
因为:public Map <String,Student>students;该属性的value值是一个Student类型的对象,那使用containsValue()传入的参数要是对应的value,在这里value对应的就是一个Student 对象。
qq_慕粉909474
super_hd
哈哈 谢谢!
慕瓜453346
它调用的是students.get(id).name(students是map)
不是 student.get(id).name(这句是错的,student是student对象)
慕瓜453346
key一般是使用String,Object等这种类型然而value的类型是自己写类型各不一样,,并且可以只有一个属性可以直接比较,,而value却可能有很多个属性,如果不重写的话得当value的所有属性都一样才能相等为true,,有时我们只需比较我们想要所以要重写。
qq_不染_sAK20181007
看看码!!!
qq_Ourfutureisn_04415208
你添加了一个和0一样的课程对象,contains判断新添加的课程对象的的时候发现和索引为1的一样,就直接返回他的索引0
慕侠3348009
不能,key是不同的,但是value可以相同。所以一个value可以对应几个id
qq_飞翔的勇气_0
写了hashCode()方法吗?
qq_慕后端9416733
key是String类型的,value是Student类型的,是自定义的。Java中自带的对象类型(例如String,StringBuilder等)都已经被重写过equals()方法和hashcode()方法等,在java api里的equals方法中,说明了覆盖了Object中的equals方法,所以有没有重写equ和ha对它就没有影响了,人家自身就重写过了。
而自定义的对象(Student),则需要自己手动去重写,这又不是java自带的,想得到理想的比较结果就得重写了。
慕移动8447653
eclipse的问题,输入并enter后光标位置只会出现在下一行开头,而不是第一个空白行开头
悟能子
你缺少获输入的学生姓名; 在前面加上一句: String name = console.next();
qq_仰望星空_96
这里的value是student,不是name,新创建一个学生才能将这个name作为student的属性传入并进行equals比对
慕UI1804229
System.out.println("对应的学生为: " + student.get(id).name());
学习为致及
你可以点开重写了(id和name)的equals方法时,当比较value时的比较的是Student(null,name),此时的id为null,所以返回的是false
qq_新一_0
懂了!
左岸的风有咖啡香
找到原因了。。containsValue方法不能只传入姓名属性,而是需要传入一个student对象
如containsValue(new Student(null,name))
weibo_西瓜大神灬_0
建议你看看java的API,containsValue(Object value),这里面的参数是一个对象,而name是个字符串
夜行百里风
在字符串长度那,用random.nextInt(9)+1
Oldmumu

如图,因为map的value值是Student类型,id值是String类型。
所以id可以直接传入Key(类型相同),name不能作为Value(类型不同,name是String)。
慕九州2452160
手机上可以下载,你可以下载手机APP慕课网的。