建立一个学生类,每个学生有一个姓名属性、班级名称属性(String)和考试成绩
属性(int),实例化10个对象先存放到一个list中,要求有三个不同的班级;某次
考试结束后,每个学生都获得了一个考试成绩。请打印出每个班级的总分和平均分
以及人数。
将学生的班级信息提取出来,然后按班级与学生键值配对存放到map中,跟第1题的形式一样,最后统计每个班级对应的学生集合中的每个学生的分数。
该题误点:
这题很多人有一个误点就是if(list.get(i).Class == "一班") 直接这样来判断某个学生的班级信息是否属于“一班”,这样肯定是不行的,你想想学生信息是通过构造器传参进来的,我们怎么知道他是属于哪个班?怎么得到有"一班"的?
所以这里应该用if (m.containsKey(classNumber)) 语句来判断Map中是否包含这个班级的键,若包含就通过m.get(classNumber)方法获得对应的学生信息集合,然后把该学生添加到这个集合中;若不包含就添加一个该班级与一个存放该班级学生信息的list集合的键值进去。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* @author 小苗
*某中学有若干学生(学生对象放在一个List中),每个学生有一个姓名属性、班级名称
属性(String)和考试成绩属性(int),某次考试结束后,每个学生都获得了一个考试成绩。
请打印出每个班级的总分和平均分。
*/
public class TestListMap {
public void count(List<Student> students){
Map<String, List<Student>> m = new HashMap<String, List<Student>>();
//得到list中的学生的班级信息,按不同的班级添加到Map中
for (int i = 0; i < students.size(); i++) {
Student s = (Student) students.get(i);
String classNumber = s.getClassNumber();
//如果班级存在就将学生添加到该班级对应的学生集合中
if (m.containsKey(classNumber)) {
List<Student> list = m.get(classNumber);
list.add(s);
} else {
List<Student> list = new ArrayList<Student>();
list.add(s);
m.put(classNumber, list);
}
}
//遍历map集合 获得班级 和对应的学生集合
for (Entry<String, List<Student>> ent : m.entrySet()) {
List<Student> s = ent.getValue();
int total = 0;
//遍历学生集合得到每个学生的分数 求总和
for (int n = 0; n < s.size(); n++) {
total = total + s.get(n).getScore();
}
System.out.println(ent.getKey() + "班 总分:" + total + " 平均分:"
+ (float) total / s.size() + " 人数:" + s.size());
}
}
public static void main(String[] args) {
TestListMap tlm = new TestListMap();
List<Student> students = new ArrayList<Student>();
students.add(new Student("Liucy", "0701", 100));
students.add(new Student("Huxz", "0702", 150));
students.add(new Student("George", "0702", 142));
students.add(new Student("Wanglin", "0701", 80));
students.add(new Student("Wuwl", "0701", 91));
students.add(new Student("Wangr", "0702", 100));
tlm.count(students);
}
}
/**
* 学生类
* @author 小苗 */
class Student{
private String name;
private String classNumber;
private int score;
public Student(String name, String classNumber, int score) {
super();
this.name = name;
this.classNumber = classNumber;
this.score = score;
}
public String getClassNumber() {
return classNumber;
}
public void setClassNumber(String classNumber) {
this.classNumber = classNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
分享到:
相关推荐
3. 集合类的实现:分析List类和Map类的内部结构,理解它们如何存储和操作数据。 4. 面向接口编程:虽然易语言没有像Java那样的接口概念,但可以通过模拟接口的实现,提供类似的功能。 5. 键值对操作:了解如何在Map...
例如,如果你有一个`Person`类,你可以将`List<Person>`转换为XML: ```java public String listToXml(List<Person> list) { JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller ...
HashMap 是一个基于哈希表的集合类,HashTable 是一个线程安全的基于哈希表的集合类,TreeMap 是一个基于树形结构的集合类。 三、Collections Collections 是 Java 中提供的一个工具类,提供了对集合类的操作方法...
2. **创建Map对象**:针对List中的每一个Bean对象,创建一个Map实例。通常情况下,Map会使用HashMap实现。 3. **复制属性到Map**:从Bean对象中获取属性值,将这些值放入Map中。键通常是属性名,值是属性值。 4. *...
Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...
Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。...
List 集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。List 集合元素可以重复。 Array 集合映射 Array 集合使用的是 List 的方式来表示的。 Map 集合映射 Map ...
**Map**接口用于保存键值对(Key-Value)的集合,每个元素都包含一个键和一个值。键是唯一的,而值可以重复。 ##### 4.1 常用方法 - `put(K key, V value)`:将指定的键值对放入Map中。 - `get(Object key)`:返回...
java集合类list-set-map.doc
例如,在Hadoop MapReduce中,InputFormat类负责将输入数据拆分为多个Map任务,每个任务处理一部分键值对。 接下来,List拆分与Map拆分类似,但更专注于有序或无序元素的序列。List通常包含一组元素,这些元素可以...
【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...
但是,如果List中有重复的empId,映射到Map时,Key不能重复的,这时我们可以使用BinaryOperator方法来解决这个问题: Map, String> mapOfEmployees = employees.stream().collect( Collectors.toMap( e -> e....
Java集合排序及java集合类详解(Collection、List、Map、Set)讲解 Java集合框架是Java语言中最重要的组件之一,能够正确使用Java集合框架对于Java程序的开发具有无比的好处。本文将详细解释Java集合框架的实现原理、...
首先新建一个实体类Person @Data public class Person { /** 编码 */ private String code; /** 名字 */ private String name; public Person(String code, String name) { this.code = code; this.name = ...
### Java集合排序及java集合类详解(Collection、List、Map、Set) #### 集合框架概述 ##### 容器简介 在Java编程中,容器(Container)是指用来存储和管理对象的一种数据结构。随着应用程序复杂度的增加,简单地...
list转map的测试类,用到jdk1.8的新特性,感觉用起来很方便
Java 集合类面试题总结 Java 集合类是 Java 语言中的一种重要组件,用于存储和操作数据。下面总结了 Java 集合类的一些常见问题和答案。 HashMap 和 Hashtable 的区别 HashMap 和 Hashtable 都是 Java 中的散列表...
- **特点**:`HashMap`是最常用的`Map`实现类,它允许键值对中的键为`null`,但是只允许一个空键,值可以有多个`null`。 - **线程安全性**:`HashMap`不是线程安全的。 - **性能**:`HashMap`提供了非常高效的查找...
ResultSet 转为 List<Map> ResultSet 转为 List<Map> 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用...
在Java编程语言中,集合框架是处理对象组的重要工具,其中List、Set和Map是最基本的接口,分别代表了有序的列表、无序的集合和键值对的映射关系。下面将详细解释这些集合类及其特点。 1. **List接口**: List是一...