最近在项目中遇到这样一个问题,对百万级的数据进行一个比对,大致有2个思路,一,将2个集合排序,将对象中需的属性取出拼接成字符串,然后对凭借的字符串进行摘要,最后对比2个集合的摘要值,二、重写对象中hash和equal,直接对比2个集合,比较其不同。对于2个方案,做了一些对比。对比的主要点集中在耗时,内存的占用,gc回收的次数
一、两种比较方式的代码实现
摘要比对,这里采用的是sha-1的方式进行摘要
/** * 生成摘要 * @param content * @return */ public static String getMessageDigest(String content) { MessageDigest messageDigest; StringBuffer sb =new StringBuffer(); try { long now = System.currentTimeMillis(); messageDigest = MessageDigest.getInstance("SHA-1"); messageDigest.update(content.getBytes("utf-8")); byte[] hash = messageDigest.digest(); for(int i = 0; i < hash.length; i++ ){ int v = hash[i] & 0xFF; if(v < 16) { sb.append("0"); } sb.append(Integer.toString(v,16).toUpperCase()); } } catch