使用HashMap优化多级嵌套循环
m层嵌套的n次的for循环的时间复杂度为O(n^m),如下所示:
public class forTradition {
public static void main(String[] args){
List<Student> stus = new ArrayList<>();
// 为stus写入10条数据 ... 略
List<Grade> gs = new ArrayList<>();
// 为gs写入10条数据 ... 略
for (int i = 0 ; i < stus.size() ; i++ ) {
Student stu = stus.get(i);
Integer id = stu.getId();
String stuName = stu.getName();
for (int j = 0 ; j < gs.size() ; j++ ) {
Grade g = gs.get(j);
if( id == g.getStuId() ) {
System.out.println( "学生:" + stuName + ",成绩:" + g.getValue() );
}
}
}
}
优化后:
public class forNew {
public static void main(String[] args){
List<Student> stus = new ArrayList<>();
// 为stus写入10条数据 ... 略
List<Grade> gs = new ArrayList<>();
// 为gs写入10条数据 ... 略
Map<Integer,Integer> gradesMap =
gs.stream().collect(Collectors.toMap( data -> data.getStuId() , data -> data.getValue() );
for (int i = 0 ; i < stus.size() ; i++ ) {
Student stu = stus.get(i);
Integer value = gradesMap.get(stu.getId());
if( null != value ) {
System.out.println( "学生:" + stu.getName() + ",成绩:" + value );
}
}
}
}