日期:2014-05-20 浏览次数:20774 次
Set<String> a = new HashSet<String>(); a.add("1"); a.add("2"); a.add("3"); Set<String> b = new HashSet<String>(); b.add("1"); b.add("3"); a.removeAll(b); System.out.println(a);
------解决方案--------------------
Collection的实现类都具有removeAll方法。
//如果集合在Map里 Map map1 = new HashMap<String, String>(); map1.put("aaaa", "aaaa"); map1.put("cccc", "cccc"); map1.put("dddd", "dddd"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("aaaa", "aaaa"); map2.put("cccc2", "cccc2"); map2.put("dddd2", "dddd2"); Set entries = map2.entrySet(); Iterator iterator = entries.iterator(); //循环完黑名单集合即可 while(iterator.hasNext()) { Entry entry =(Entry)iterator.next(); Object key = entry.getKey(); map1.remove(key); }
------解决方案--------------------
前不久。我完成一个手机号码黑名单过滤功能。。。看了很多资料最终采用数据库临时表。将导入的一个几十万手机号码的txt文件进行黑名单过滤。
主要通过数据库,及临时表解决较快。数据库为sql2000
具体做法:
首先:写一个存储过程过滤黑名单【写一个过滤黑名单表的删除语句。进行黑名单过滤】,包括分页提取最后的数据,我的是每页100000条。
1. 导入txt将其加入HASHSET去掉重复。
2. 数据批量读入临时表
3. 调用存储过程进行过滤,循环分页自动提取。
4. 干净数据放入集合。
5. 清除临时表。
6. 下载一个没有黑名单的文件。
实验数据:10万黑名单数据,30万txt数据。。在自己的电脑上,到第5步完成用时没超过1分钟。。。服务器应该更快。。
------解决方案--------------------
如果不想使用数据库的话,,只能通过程序解决,考验应用程序性能,用etnet的也不错。。。还得看你的数据量,是很大。。还是超大。。。我的方法只是将开销转到数据库完成。。。
------解决方案--------------------
将压力给数据库,我个人呢其实不太喜欢。因为应用服务器可以方便的横向扩展,一台不行我上10台,每台服务器运行10个线程,每个线程处理N个号码。数据库就没那么方便的进行横向扩展了。