weixin_慕先生5336046
慕标2264835
直接用st.name = name;就没有起到演示修改用put()方法的效果了!
你若成风2020
获取学生姓名并显示,是为了演示效果,看的更直观
奶尤糯米团子
while中true是指永远是true死循环,但是它的循环结束条件是break;如果判断没有对应学生会用continue继续循环,循环跟student为不为null无关。
HashMap保存数据的过程为:首先判断key是否为null,若为null,则直接调用putForNullKey方法。若不为空则先计算key的hash值,然后根据hash值搜索在table数组中的索引位置,如果table数组在该位置处有元素,则通过比较是否存在相同的key,若存在则覆盖原来key的value,否则将该元素保存在链头(最先保存的元素放在链尾)。
在这简单来说是value被覆盖了。
Likeme17
要把代码贴上来啊老哥
LMH300913
参考一下代码:

勤劳的搬砖工
Object 换成Student,初始化一下
qq_童化金_dwxHIS
package com.imooc;
import java.io.File;
import java.io.*;
public class FileInOutEx {
public static void main(String[] args) throws IOException{
File file_Book1 = new File("Book1.txt");
byte[] bookInfo = "世界是好的\t 350.0\t Friedman\t".getBytes();
file_Book1.createNewFile();
FileOutputStream fos = new FileOutputStream(file_Book1);
fos.write(bookInfo);
fos.close();
FileInputStream fis = new FileInputStream(file_Book1);
byte[] byt = new byte[1024];
System.out.println("书籍名称\t 价格\t 作者\t");
System.out.println("---------------------------------------");
int i = fis.read(byt);
System.out.print(new String(byt,0,i));
fis.close();
}
}
丶年少
String 对象被创建后,不可被操作
慕设计7579901
两个都要改变的话,你把旧的删除,重新添加一个不就行了?
慕婉清0311762
你可以试试做题目时,不看老师的注释,锻炼自己的逻辑思维能力。至于语法不是死记硬背,而是去理解,去掌握,方法变量数组的用法有千万种,你只有熟练掌握了它的语法,不论写什么功能你都能游刃有余了。
你先把第一季学懂了学透了再去学习后面的,java不论写什么项目都是围绕它面向对象的这个概念展开的。我这里有份java面试宝典,里面对java基础的很多知识的概念都讲得很详细,你可以私信我发给你。
慕勒5458020
找不到学生ID的话可以多次输入,知道找到学生ID跳出循环
慕娘2577218
while(true)这样就是一个死循环,如果你不用break终止的话,它就会一直循环下去,而不会结束
泥丶黎
其实很简单,只是因为老师在讲的时候并没有演示到位而已。
你尝试删除while之后,运行程序输入之前没有添加过得ID,你会发现程序停止并且报错了。
这说明,你的运行机制不完善,判断机制不全面
所以这里需要将其中的remove套用一个无限循环(实际在成功的时候只运行一次,所以break),
continue就是这次无限循环的点,用来提示“该ID不存在”,以此能让本次的remove是能够正常运行的,而判断也是包含价值的。
孤存dm1t
楼上在说什么?完全可以改为 for(;;) ,因为两种条件都有跳出条件,这种情况下和 while(true) 完全等价。
幕布斯2575146
public student(String name, int age) {
//name = this.name;
//age = this.age;
this.name = name;
this.age = age;
}
_何者_
首先你要知道Java中无序(unordered),有序(ordered)是什么意思,它们跟我们我们所理解的可能不太一样.
在Java中无序指的是Java语言没有规定某个容器按什么顺序遍历,在不同的Java虚拟机上对某个容器的实现是不一样,比如说运行在Windows和Linux上的Java虚拟机对HashSet的遍历顺序可能不太一样,但对同一种虚拟机来说遍历输出都是一样的。而不是我们日常所理解的"无序就是乱序"的意思。
有序也是一样的道理,Java规定了容器的遍历顺序,在不同的Java虚拟机上要保证遍历的顺序跟加入元素的顺序一致。
通俗地来讲,在Java中无序就是不同的Java虚拟机对某个容器有不同的遍历方法,但对每一个具体的虚拟机它们的遍历方法是固定的.比如你遇到的情况在Windows上运行的Java虚拟机对HashSet的遍历只有一种输出方式,但你换一个Java虚拟机跑一跑你这个程序可能输出就不一样了。
lxh7
长相问题
qq_宫湦_03802224
好像会根据键值进行排序
慕工程7468250
你用的是HashMap(哈希表)吗?
HashMap是由一对键值对来存储数据的。
这个方法是HashMap的get(Object key)方法,传进去键值对的键,返回指定的键映射的值,如果这个Map不包含这个键,则返回 null
qq_西伯利亚狼_12
st.name是个value值
例 st.name是“小明”
“小明”=“小红”?无法付值,左边必须为一个变量
这是我的理解
qq_嗨棈L靈_0
好想法呀!!你的想法完全正确!map的value可以是一个list,但是有一点需要注意的是,list里的add()方法是添加一个新的element到list里面去,不是修改原本的值。我写了一个实现你这个想法的代码,结果是:
key = 1, value = [aaa]
key = 1, value = [aaa,bbb]
可以看到list中原本存储的list.get(0)是"aaa",现在调用了add("bbb")之后相当于给list添加了一个新的element。
代码:
public class MapList {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,List<String>> m = new HashMap<String, List<String>>();
List<String> l = new ArrayList<String>();
l.add("aaa");//first element in list
m.put("1",l);
//predefined original value of key "1"
System.out.println("key = 1, "+"value = "+m.get("1").toString());
//update value of key "1"
m.get("1").add("bbb");
System.out.println("key = 1, "+"value = "+m.get("1").toString());
}
}
陈迪0
是的是的
鲁丫丫
public void testEntrySet() {
Set<Map.Entry<String,Student>> entrySet = students.entrySet();
for (Map.Entry<String, Student> entry : entrySet) {
System.out.println("取得键:"+entry.getKey());
System.out.println("对应的值为:"+entry.getValue().getName());
}
}
死记硬背 格式如此而已
qq_踏雪飞鸿_1
value是一个Collection类,Collection包含了:Set、List和Queue。他可以是Set也可以是List亦可以是Queue。程序中的value是Student,未用泛型规定其为Set或List类,就是默认的Collection类。当然你也可以用泛型规定value是指定类型类。例如:
Map<String,List<String>> map= new HashMap<String, List<String>>();
List<String> list= new ArrayList<String>();
qq_析木_0
可以去掉.
求采纳
只有鱼知道
String ID = console.next();
你的位置要放在while里面
public void testRemove(){
Scanner console = new Scanner(System.in);
while (true){
System.out.println("请输入要删除的学生ID:");
String ID = console.next();
Student st = map.get(ID);
if(st==null){
// 提示输入的ID并不存在
System.out.println("该ID不存在!");
continue;
}
// 删除
map.remove(ID);
System.out.println("成功删除学生:"+st.getName());
break;
}
}
飞行烤鸭
Map里的节点也就是Entry是键值对,key关联value,这里put了新的键值对之后,同一个key关联的value进行了更新,而原来的value就不会被key关联了,Java中的对象全部分配在堆上,对于无用的对象,由虚拟机进行对象的回收。
daizg_0731
嗯,是的
慕粉1474530878
map在实际开发过程中会经常遇到,如果有不明白的,可以回来再看课程视频也是木有问题的,温故而知新吗,哈哈