这题本来是Python的,但既然我们Java实验课老师出了这道题,那就变通一下吧!
参考Python原题:7-3 集合和列表,按从小到大的顺序组合成一个字典 (16 分)
题目
有二个长度一样的集合和列表,按从小到大的顺序组合成一个字典。
读了题开始怀疑出处,再看到输入样例就绷不住了。上次实验拿C++的题,这次拿Python的。不过也可以理解老师的用意,应该是不想让我们轻易在网上找到答案。但现在不就有了么!
输入格式:
输入二个长度一样的集合和列表,集合元素全部为整型,列表元素全部为字符串型。
输出格式:
组合后的字典。
输入样例:
在这里给出一组输入。例如:
{1,2,6,5,3,4}
['aa','cc','bb','d','f','e']
输出样例:
在这里给出相应的输出。例如:
{1: 'aa', 2: 'bb', 3: 'cc', 4: 'd', 5: 'e', 6: 'f'}
代码实现
注意到题目要求的排序实际上就是自然排序,故无需写Comparator了,省事。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String input = in.readLine();
HashSet<Integer> nums = new HashSet<>();
// 把输入的整行字符串去除首尾花括号,再以逗号分割为字符串数组,最后遍历加入集合
for (String i : input.substring(1, input.length() - 1).split(",")) {
nums.add(Integer.valueOf(i));
}
input = in.readLine();
List<String> strings = Arrays.asList(input.substring(1, input.length() - 1).split(","));
// 值须排序,因为TreeMap默认以键自然排序
Collections.sort(strings);
CustomTreeMap dict = new CustomTreeMap();
Iterator<Integer> i = nums.iterator();
Iterator<String> s = strings.iterator();
while (i.hasNext()) {
dict.put(i.next(), s.next());
}
System.out.println(dict);
}
}
/**
* 自定义TreeMap类,仅重写了toString方法以满足输出要求
*/
class CustomTreeMap extends TreeMap<Integer, String> {
@Override
public String toString() {
// 输出差异不大,简单替换就好了
return super.toString().replace("=", ": ");
}
}