前几天,有个同事问我说怎么找出两个List集合中重复的元素,我当时就说一个集合在外面循环,一个集合在内循环,如果两个元素相等了,就找出来了,我回来一想还是不对,要是数据非常多,这样循环下去,服务器会卡死的,最后我想了想,用以下两种方法:
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
list2.add("d");
list2.add("f");
list2.add("g");
list2.add("h");
list2.add("k");
第一种方法:这是把list1集合放到list2中
list2.addAll(list1);
HashMap<String,Integer> mapList=new HashMap<>();
for(String str:list2){
int count=0;
if(mapList.get(str)!=null){
count=mapList.get(str)+1;
}
mapList.put(str,count);
}
System.out.println("重复的元素是:");
for(String key:mapList.keySet()){
if(mapList.get(key)!=null && mapList.get(key)>0){
System.out.println(key);
}
}
第二种方法:
Map<String,String> map=new HashMap<>();
String str=null;
String stp=null;
String psp=null;
for(int i=0;i<list1.size();i++){
str=list1.get(i);
map.put(str,str);
}
for(String spt:map.keySet()){
System.out.println("key:"+spt+"-----------value:"+map.get(spt));
}
System.out.println("==========="+map.entrySet());
for(int i=0;i<list2.size();i++){
stp=list2.get(i);
if(stp.equals(map.get(str))){
System.out.println("重复的元素:"+stp);
}
}
以上就是我用的两种方法,由于是个菜鸟,所以大神们有更好的方法望指点,在下感激不尽!
补充:
下面是java8新特性去list集合重复的方法,非常简单,比前的方法简单多了,
首先是将两个集合合并在一起,然后就是下面的方法:(list2是合并以后的集合,spa是去重复的新集合)
List<String> spa = list2.stream()
.distinct()
.collect(Collectors.toList());
这种方法最简单,代码少,清晰明了!!!!