题意 比较两个字典 按字典序输出所有添加 删除 修改的项 如果没有任何更新 输出 No changes
map的应用 对比两个字典 注意开始字符串的处理和字典可以为空
import java.math.BigInteger;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
while(n--!=0){
Map<String,BigInteger> one = new HashMap<>();
Vector<String> ins = new Vector<>();//增加的键
Vector<String> des = new Vector<>();//减少的键
Vector<String> upd = new Vector<>();//修改的键
Vector<String> bal = new Vector<>();//不变的键
String str1 = scan.next();
String str2 = scan.next();
String ss1 = str1.substring(1, str1.length()-1);
String ss2 = str2.substring(1, str2.length()-1);
String[] s1 = ss1.split(",");
String[] s2 = ss2.split(",");
for(int i=0;i<s1.length;i++){
if(!(s1[i].equals("")||s1[i].equals(" "))){
int index = s1[i].indexOf(':');
String name = s1[i].substring(0, index);
BigInteger num = new BigInteger(s1[i].substring(index+1));
one.put(name, num);
}
}
for(int i=0;i<s2.length;i++){
if(!(s2[i].equals("")||s2.equals(" "))){
int index = s2[i].indexOf(':');
String name = s2[i].substring(0, index);
BigInteger num = new BigInteger(s2[i].substring(index+1));
if(!one.containsKey(name)){
ins.add(name);
continue;
}else{
BigInteger b = one.get(name);
if(b.compareTo(num)!=0){
one.put(name, new BigInteger("-1"));
}else{
one.put(name, new BigInteger("-2"));
}
}
}
}
Iterator<Map.Entry<String, BigInteger>> entries = one.entrySet().iterator();
BigInteger a1 = new BigInteger("-1");
BigInteger a2 = new BigInteger("-2");
while(entries.hasNext()){
Map.Entry<String, BigInteger> entry = entries.next();
if(entry.getValue().compareTo(a2)==0){
bal.add(entry.getKey());
}else if(entry.getValue().compareTo(a1)==0){
upd.add(entry.getKey());
}else{
des.add(entry.getKey());
}
}
Collections.sort(ins);
Collections.sort(des);
Collections.sort(upd);
Collections.sort(bal);
if(upd.isEmpty()&&ins.isEmpty()&&des.isEmpty()){
System.out.println("No changes");
}else{
if(!ins.isEmpty()){
System.out.print("+");
for(int i=0;i<ins.size();i++){
if(i!=ins.size()-1){
System.out.print(ins.get(i)+",");
}else{
System.out.print(ins.get(i));
}
}
//if(n!=0)
System.out.println();
}
if(!des.isEmpty()){
System.out.print("-");
for(int i=0;i<des.size();i++){
if(i!=des.size()-1){
System.out.print(des.get(i)+",");
}else{
System.out.print(des.get(i));
}
}
//if(n!=0)
System.out.println();
}
if(!upd.isEmpty()){
System.out.print("*");
for(int i=0;i<upd.size();i++){
if(i!=upd.size()-1){
System.out.print(upd.get(i)+",");
}else{
System.out.print(upd.get(i));
}
}
//if(n!=0)
System.out.println();
}
}
//if(n!=0)
System.out.println();
}
}
public static int f(String str1,String str2){
if(str1.equals(str2)){
return 0;
}else{
int index1 = str1.indexOf(":");
int index2 = str2.indexOf(":");
BigInteger b1 = new BigInteger(str1.substring(index1+1));
BigInteger b2 = new BigInteger(str2.substring(index2+1));
return b2.compareTo(b1);
}
}
}