简单算法:实现姓名的去重。
这里我们假设忽略大小写情况下是一样的。
第一种方案:利用HashMap进行去重。HashMap的存储特点是:无序不可重复,利用该特点我们可以将目标中的字符串进行遍历,只要是我们HashMap集合中没有的,我们就将他放进去,之后添加到目标集合中,这样便实现了姓名的去重。
代码如下:
public List<String> nameDeduplication1(String[] names) {
// 我们定义一个List集合用于收集结果并返回。
List<String> result = new ArrayList<String>();
//创建HashMap集合
HashMap<String,Integer> mp = new HashMap<String,Integer>();
for(int i = 0;i < names.length;i++){ //遍历姓名数组
String str = names[i].toLowerCase(); // 全部转换为小写
if(!mp.containsKey(str)){ //如果HashMap集合中不包含该姓名 就将该姓名放入集合中,并添加到我们要的结果集合中!
mp.put(str,1);
result.add(str);
}
}
return result;
}
看到这里,我想大家应该自己也有了思路,那集合那么多,我能不能用其他的集合呢?答案当然是肯定的,这样有相同特性的集合–Set便也能发挥如此作用,具体如何实现,大家可以自己写一写,写完可以参考如下代码。
public List<String> nameDeduplication2(String[] names) {
// 做简单判断,如果为传入字符串没有重复名字,那我们把他返回
List<String> list = new ArrayList<>();
if(names == null || names.length == 0){
return list;
}
Set<String> set = new HashSet<>();
for(int i = 0; i < names.length; i++){
String str = names[i].toLowerCase();
if(set.contains(str)){
continue;
}else{
set.add(str);
list.add(str);
}
}
return list;
}