java练习题1—链表合并

题目描述:                                                                                    

已有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()表示判断是否还有输入数据,返回值是布尔类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值