目录标题一、题目1二、题目2三、总结一、题目1.有一个类 Pair含有两个成员 a 和 b如果两个 Pair 对象的 a 和 b 都相等则认为这两个对象相等。Datapublic class Pair {Integer a;Integer b;}有两个 List, List l1, List l2, 写一个函数求这两个 List 的交集即返回这两个List 当中相同的元素放在一个集合中返回。注意请尽量写准确清晰按照可执行的 Java代码写我的答案publicsetPairfn(ListPairl1,ListPairl2){setPairresultSetnewHashSet();l1.stream().map(item{for(Pairinner:l2){//Integer转换比较可能有误if(inner.getA().equals(item.getA())iner.getB().equals(item.getB()){resultSet.add(inner);}}})returnresultSet;}AI修正后代码importjava.util.*;importjava.util.stream.Collectors;publicSetPairfn(ListPairl1,ListPairl2){SetPairresultSetnewHashSet();for(Pairp1:l1){for(Pairp2:l2){if(p1.getA().equals(p2.getA())p1.getB().equals(p2.getB())){resultSet.add(p1);// 可以添加p1或p2因为它们相等break;// 找到后跳出内层循环}}}returnresultSet;}标准答案(把我的原来的方法效率是O(n²)使用HashSet可以优化到O(n)。)使用Stream API的简洁写法publicSetPairfn(ListPairl1,ListPairl2){SetPairset1newHashSet(l1);returnl2.stream().filter(set1::contains).collect(Collectors.toSet());}注意要使HashSet.contains()正常工作必须在Pair类中正确重写equals()和hashCode()方法DatapublicclassPair{Integera;Integerb;Overridepublicbooleanequals(Objecto){if(thiso)returntrue;if(onull||getClass()!o.getClass())returnfalse;Pairpair(Pair)o;returnObjects.equals(a,pair.a)Objects.equals(b,pair.b);}OverridepublicinthashCode(){returnObjects.hash(a,b);}}二、题目2有如下数据库表是学生的各科成绩表格学号 姓名 科目 分数1 张三 语文 801 张三 数学 901 张三 英语 702 李四 语文 602 李四 数学 802 李四 英语 903 王五 语文 703 王五 数学 60 … … … … 问题1、 撰写建表 SQL 语句建立学生成绩表2、 撰写查询 SQL 语句输出所有科目平均分大于 80 分的学生3、 撰写查询 SQL 语句输出语文成绩比数学成绩好的学生我的答案//要加判断或者覆盖create table table{column idvarchar2(16)not NULL primary key,Columnnamevarchar2(16)defaultnull,Columnsubjectvarchar2(16)defaultnull,Columnscorenumber(1000,2)defaultnull,}Selectname from(selectsum(score)/3total,t1.name from table t1 where subject‘语文’ or subject‘数学’or subject‘英语’ groupBy t1.name)t2 where t2.total80;Selectname from((select t1.score,t1.name from table where subject‘语文’)t1 left join(select t1.score,t1.name from table where subject‘数学’)t2)t3 where t1.scoret2.score;错误分析建表语句答案CREATE TABLE student_score(idVARCHAR2(16)NOT NULL, name VARCHAR2(16), subject VARCHAR2(16), score NUMBER(5,2), PRIMARY KEY(id, subject));2.输出所有科目平均分大于80分的学生(竟然忘了还有 having avg )SELECT name FROM student_score GROUP BY name HAVING AVG(score)80;3.输出语文成绩比数学成绩好的学生SELECT c.name FROM student_score c JOIN student_score m ON c.namem.name WHERE c.subject语文AND m.subject数学AND c.scorem.score;SELECT c.name FROM student_score c LEFT JOIN student_score m ON c.namem.name AND m.subject数学WHERE c.subject语文AND(c.scorem.score OR m.score IS NULL);三、总结功能 思路都是正确的但是太复杂在word里面写代码不容易啊(没有提示)菜就得多练