阿里巴巴面试题之List集合去重
Posted 花伤情犹在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里巴巴面试题之List集合去重相关的知识,希望对你有一定的参考价值。
第一种方案:将List集合转换成Set集合:
public class Test {
public static void main(String[] args) {
//将List集合去重
List<String> list= Arrays.asList("a","b","c","c","b","a");
list.forEach(System.out::print);//遍历List集合
//第一种方案将List集合转换成Set集合
Set<String> set=new HashSet<>();
for (String lists : list){
set.add(lists);
}
System.out.println("\\n-------------分割线---------------");
set.forEach(System.out::print);//遍历Set集合
}
}
原理:add)方法添加时,最底层的实现是先判断hashCode,再判断equals,而对于String而言,
equals比较的是值,也是相等的,所以Set集合不能有重复元素。
第二种方案:JDK8的流式编程
public class Test {
public static void main(String[] args) {
//将List集合去重
List<String> list= Arrays.asList("a","b","c","c","b","a");
list.forEach(System.out::print);//遍历List集合
System.out.println("\\n-------------分割线---------------");
//JDK8的流式编程
list.stream().distinct().collect(Collectors.toList()).forEach(System.out::print);
}
}
原理:distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。如果distinct()正在处理有序流,那么对于重复元素,将保留以遭遇顺序首先出现的元素,并且以这种方式选择不同元素是稳定的。在无序流的情况下,不同元素的选择不一定是稳定的,是可以改变的。distinct()执行有状态的中间操作。在有序流的并行流的情况下,保持distinct()的稳定性是需要很高的代价的,因为它需要大量的缓冲开销。如果我们不需要保持遭遇顺序的一致性,那么我们应该可以使用通过BaseStream.unordered()方法实现的无序流。
其它方案例如循环遍历不一一列举。
以上是关于阿里巴巴面试题之List集合去重的主要内容,如果未能解决你的问题,请参考以下文章