(1)编写Student类,只有String name与int age两个属性和他们的setter/getter方法,覆盖其hashCode与equals方法。 (2)在Util类中编写方法:List getRandomStudents(int n)随机生成n个学生的列表。 说明:调用“基础代码”中的Util.getRandomName (int min, int max)获取随机名字,调用public static int getRandomAge(int min, int max)生成随机年龄。 (3)在Util类中编写方法:public static Map makeStudentMap(List);,将List中每个Student的name作为key, Student对象本身作为value放入Map中,并返回。 (4)在Util类中编写方法:public static String searchName(List nameList, String name);,根据指定的name返回相应的字符串,如果没有找到返回null。 (5)在Util类中编写方法:public static Student searchStudent(Map stuMap, String name);,根据指定的name返回对应的学生,如果没有找到返回null。 (6)在Util类中编写方法:public static List generateNameList(int n);,生成n个字符串的NameList并返回。 (7)在Util类中编写方法:Map generateStudentMap(int n);,生成包含n个键的的StudentMap并返回。 说明:调用getRandomStudents方法;调用makeStudentMap方法;返回StudentMap。 (8)对比测试。在初始化阶段调用generateNameList方法生成nameList列表,里边包含1000万个字符串。在初始化阶段调用getRandomStudents生成1000万个Student对象,然后调用makeStudentMap方法生成stuMap映射表。 对nameList调用searchName方法搜索指定字符串并统计执行时间。 对stuMap调用searchStudent方法搜索指定字符串对应的学生对象并统计执行时间。 思考:步骤(8)中,哪个方法搜索速度快?为什么? (9)遍历输出StudentMap前10个的key,前10个value,前10个entry。
时间: 2023-06-10 21:05:30 浏览: 97
对于步骤(8),应该对两个方法分别进行比较测试。
对于searchName方法搜索nameList列表,可以通过循环遍历列表,逐一比较每个字符串的值,直到找到指定的字符串或者遍历完整个列表。由于列表中有1000万个字符串,这种方法的时间复杂度为O(n),搜索速度可能较慢。
对于searchStudent方法搜索stuMap映射表,可以直接通过指定的字符串key来获取对应的Student对象,时间复杂度为O(1)。这种方法搜索速度较快。
因此,searchStudent方法搜索速度较快,因为它的时间复杂度比searchName方法低得多。
对于步骤(9),可以使用以下方法:
```
Map<String, Student> studentMap = generateStudentMap(10);
List<String> keyList = new ArrayList<>(studentMap.keySet());
List<Student> valueList = new ArrayList<>(studentMap.values());
List<Entry<String, Student>> entryList = new ArrayList<>(studentMap.entrySet());
System.out.println("前10个key:");
for (int i = 0; i < 10; i++) {
System.out.println(keyList.get(i));
}
System.out.println("前10个value:");
for (int i = 0; i < 10; i++) {
System.out.println(valueList.get(i));
}
System.out.println("前10个entry:");
for (int i = 0; i < 10; i++) {
System.out.println(entryList.get(i));
}
```
该方法首先从stuMap映射表中获取前10个key、value和entry,并在控制台上显示出来。
阅读全文