AppDyn面经

原帖地址:一亩三分地

问个 thread safe 问题 , 要求从一个 目录中找出没有重复的文件
写了个如下的 简单的code, 如果不用 synchronized 做到高效的 thread safe List findUnique(List files){ // path
Set dupFiles = new HashSet();
List res = new ArrayList();
ConcurrentHashMap> hashMap = new ConcurrentHashMap>();// hash code , list of file Names
for(File file: files ){
String curHcode = hash( file );
List val = hashMap.get(curHcode);
if( val == null ){
val =new ArrayList ();
hashMap.put(curHcode, val);
}
val.add(file.getName());
}
for(String key:hashMap.keySet()){
List val =hashMap.get(key);
if( val.size() > 1 )
dupFiles.addAll(val);
}
for(File file : files){
if( !dupFiles.contains( file.getName() ) )
res.add(file);
}
return res;
}