用HashMap在内存中保存如下信息,包含学号、姓名、成绩三项内容,HashMap初始包含5项: 71108501 张三 80.0 71108502 李四 79.5 71108503 王五 91.0 71108504 赵六 60.0 71108505 宋七 18.6, 随机产生 1000 个记录,学号从71108506递增 (姓名可以只用英文,可以为中文,中文姓为,名为中文即可,不超过3个字),放入 HashMap 中;使用 ObjectInputStream 和 ObjectOutputStream 将上题中的 HashMap 保存到外存上,并读出
时间: 2024-02-29 14:51:49 浏览: 61
举例详解Java编程中HashMap的初始化以及遍历的方法
好的,我知道你的问题了。下面是Java代码实现:
```java
import java.io.*;
import java.util.HashMap;
import java.util.Random;
public class HashMapIOExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
HashMap<Integer, Student> hashMap = new HashMap<>();
hashMap.put(71108501, new Student("张三", 80.0));
hashMap.put(71108502, new Student("李四", 79.5));
hashMap.put(71108503, new Student("王五", 91.0));
hashMap.put(71108504, new Student("赵六", 60.0));
hashMap.put(71108505, new Student("宋七", 18.6));
Random random = new Random();
for (int i = 0; i < 1000; i++) {
int id = 71108506 + i;
String name = generateRandomName();
double score = random.nextDouble() * 100;
hashMap.put(id, new Student(name, score));
}
// 写入HashMap到文件
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("hashmap.bin"));
oos.writeObject(hashMap);
oos.close();
// 读取文件中的HashMap
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("hashmap.bin"));
HashMap<Integer, Student> readHashMap = (HashMap<Integer, Student>) ois.readObject();
ois.close();
// 打印读取到的HashMap中的学生信息
for (int id : readHashMap.keySet()) {
Student student = readHashMap.get(id);
System.out.printf("%d %s %.1f\n", id, student.getName(), student.getScore());
}
}
private static String generateRandomName() {
String surname = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜";
String givenName = "雨忆平想飞花海云叶空寒天明夜紫青梦";
StringBuilder sb = new StringBuilder();
sb.append(surname.charAt((int) (Math.random() * surname.length())));
for (int i = 0; i < 2; i++) {
sb.append(givenName.charAt((int) (Math.random() * givenName.length())));
}
return sb.toString();
}
}
class Student implements Serializable {
private String name;
private double score;
public Student(String name, double score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public double getScore() {
return score;
}
}
```
上述代码中,我们首先创建了一个HashMap对象,然后向其中添加了5个学生信息。接着,使用Random类随机生成1000个学生信息,并添加到HashMap中。
然后,我们使用ObjectOutputStream将HashMap对象写入到文件中,使用ObjectInputStream从文件中读取HashMap对象。最后,我们遍历读取到的HashMap对象,打印出所有学生的学号、姓名和成绩。
注意,我们需要将Student对象实现Serializable接口,以便能够将HashMap对象写入到文件中。另外,我们随机生成学生姓名的方法generateRandomName()只是一个简单的示例,实际应用中可能需要更加复杂的逻辑。
阅读全文