这里分享下我做过的集合去重处理!顾名思义就是把一个集合处理了,然后得到一个新的集合,这个集合里面的元素是没有重复的!下面就是贴出的代码啦!
public class UniqueListUtils {
public static List removeDuplicateWithList(List list) {
Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = list.iterator(); iter.hasNext();) {
T element = iter.next();
if (set.add(element))
newList.add(element);
}
return newList;
}
}
这里面的T就是传进去的任意对象类型拉,假如你要传入一个List的集合,你的T就是String啦。当然这个方法你只需要调用就行了,随便传入一个已知的list集合进去就行啦!
这里面主要用到的就是hashSet里面的算法啦,hashSet自带了一个add方法,返回的是一个boolean值,他会自动根据hashcode来判断是否有相同值啦!这种方法比自己做if判断来得效率要高很多的!
再说说这种方法的劣势吧,这种方式去重并不是特别好,当然这种写法是一种给菜鸟的思路啦,java自带jdk里面有很好的实现方法,不过我们这些菜鸟很多都是不知道的!
这里引用下一楼大神的方法,他提供的就是原本jdk自带实现的方法,当然有兴趣的同学可以去看看jdk源码是怎么处理集合去重的!在这里感谢"酷的飞上天空"这位大神,让我又学到东西啦,多谢啦!有更好的算法或者实现的朋友么可以在下面讨论下哦,菜鸟们会很感激的啦!在此多谢啦!
[quote="酷的飞上天空"]List list
// 去重
list = new ArrayList(new HashSet(list));
[/quote]
希望能帮到你!
最后我修改了下"酷的飞上天空"的写法再贴上来,需要的可以看看哈!
public static List removeDuplicateByHashSet(List list){
List newlist = new ArrayList(new HashSet(list));
return newlist;
}
下面是hashset源码处理,贴出来看下 哈
public HashSet(Collection extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
反正我现在的积累是看不太懂的!