HashMap在进行key的查找时,比较的顺序如下:
计算对象的Hash Code,看在表中是否存在。
检查对应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(); } } }