题目描述:
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
输入格式:
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成
输出格式:
按照学号升序排列的数据
样例输入:
2 3
5 100
6 89
3 82
4 95
2 10
样例输出:
2 10
3 82
4 95
5 100
6 89
解题思路:
利用HashMap存取学生的学号和成绩,并排序输出
代码:
import java.util.*;
public class Main {
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())//scanner.hasNext()表示判断还有没有输入
{
int n = scanner.nextInt();//输入n和m
int m = scanner.nextInt();
Map<Integer,Integer> map = new HashMap<>();//定义一个map接受数据
for(int i = 0;i<n+m;i++)
{
map.put(scanner.nextInt(),scanner.nextInt());//将接受到的数据写入map中
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());//将map中的数据存入链表中
//1.map.entrySet()会将键值对转化成Set集合
//2.后边半部分的map.entrySet()返回了一个Set集合,并将Set集合作为参数传递给ArrayList构造函数
Collections.sort(list,new Comparator<Map.Entry<Integer, Integer>>()//按照Comparator接口重写的排序方法compare对list进行排序
{
public int compare(Map.Entry<Integer, Integer> o1,Map.Entry<Integer, Integer> o2)//参数确保和list参数类型一致
{
return o1.getKey().compareTo(o2.getKey());
}
});
list.forEach(x->System.out.println(x.getKey()+" "+x.getValue()));//输出
}
}
}
知识收获:
1.了解了map.Entry相关知识,每个 Map.Entry
对象表示一个键值对,包含两个方法:getKey()
和 getValue()
,分别用于获取该键值对的键和值。
具体使用参考文章—Map集合map.entrySet()玩法_野生牧码仁的博客-CSDN博客
2.了解了Comparator接口的知识
3.了解到map.put 的含义是将数据写入map中、scanner。hasNext()表示判断是否还有输入数据,返回值是布尔类型。