一、前言
前几天,给一个同事写接口,他的要求是,给我传来一个List<String> ids
,这个里面可能有重复的id,需要帮她去重。我想这个用循环是比较麻烦的,有什么简单的吗?然后就找到了下面的几个方法,总结一下。
二、去重思路
两个思路:
1.遍历List集合判断是否在另一个集合中存在,赋值给另一个集合
2.赋值给Set结合,再返回list集合
【知识补充】可能有一些朋友对Set不熟悉,不了解Set是什么?
Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。在这里大家了解,它里面不能放重复的信息就行了。
三、去重方法demo
- 方法一: 赋值给另一个list2,判断list2是否含有要添加的值(最笨)
这里判断使用的是,list2.contains(字段)
。
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
List<String> newList = new ArrayList<String>();
for (String cd:list) {
if(!newList.contains(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}
结果:可以看出,使用这种方法,可以达到去重的效果,但是集合中是数据依旧是乱的,没有排序。
去重后的集合: [6, 2, 3, 1, 7, 5]
- 方法二、使用
set.add(字段)
来判断能否添加到set中,如果可以添加,也向新的list.add()
中添加一份,不打乱顺序。
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
Set set = new HashSet();
List newList = new ArrayList();
for (String cd:list) {
if(set.add(cd)){
newList.add(cd);
}
}
System.out.println( "去重后的集合: " + newList);
}
结果:同样是达到去重,但是没有排序。
去重后的集合: [6, 2, 3, 1, 7, 5]
- 方法三、使用Set去重
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
//set 去重
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(list);
newList.addAll(set);
System.out.println( "去重后的集合: " + newList);
}
结果:网上有朋友说使用HashSet存储是无顺序的,但是小编亲测,是有顺序的。有待考证
去重后的集合: [1, 2, 3, 5, 6, 7]
网上还有一个朋友说,使用treeSett,可以去重且按照自然顺序排列
@Test
public void testMap(){
List<String> list = new ArrayList<String>();
list.add("6");
list.add("2");
list.add("3");
list.add("1");
list.add("7");
list.add("5");
list.add("2");
list.add("3");
//去重并且按照自然顺序排列
List newList = new ArrayList(new TreeSet(list));
System.out.println( "去重后的集合: " + newList);
}
四、小结
没有百不到的,没有G不到的!
只要自己有想法,百度和谷歌都会有相似的方案,这个就是现在互联网的特点,小编总结的这些东西也是从网上找到的。加油!