HashMap在进行key的查找时,比较的顺序如下:

  1. 计算对象的Hash Code,看在表中是否存在。

  2. 检查对应Hash Code位置的对象和当前对象是否相等。
    例题 ZJ21
    图片说明
    参考代码

    import java.util.*;
    public class Main{
     public static void main(String[] args){
         int n,m;
         Scanner scan = new Scanner(System.in);
         n = scan.nextInt();
         for(int i=0;i<n;++i){
             m = scan.nextInt();
             int ans = 1;
             HashMap<Pair,Integer>map = new HashMap<>();
             HashMap<Pair,Integer>map_tmp = new HashMap<>();
             // 特征数目
             int num;
             for(int j=0;j<m;++j){
                 num = scan.nextInt();
                 int a,b;
                 map_tmp.clear();
                 for(int k=0;k<num;++k){
                     a = scan.nextInt();
                     b = scan.nextInt();
                     Pair p = new Pair(a,b);
                     map_tmp.put(p,map.getOrDefault(p,0)+1);
                     ans = Math.max(ans,map_tmp.get(p));
                 }
                 map.clear();
                 // 将一个映射中的键值对全部复制到另一个映射中
                 map.putAll(map_tmp);
             }
             System.out.println(ans>=2?ans:1);
    
         }
     }
     // 注意自定义对象用作HashMap的key时需要手动重写equals与hashCode两个方法
     static class Pair{
         int x,y;
         public Pair(int x,int y){
             this.x  = x;
             this.y = y;
         }
         public int getX(){return x;}
         public int getY(){return y;}
         @Override
         public boolean equals(Object o){
             if(this == o) return true;
             if(o==null || getClass()!=o.getClass()) return false;
             Pair p = (Pair)o;
             return this.x==p.getX() && this.y==p.getY();
         }
         @Override
         public int hashCode(){
             return String.valueOf(x).hashCode() & String.valueOf(y).hashCode();
         }
     }
    }