¿Quiere eliminar elementos duplicados de la Lista? Tengo dos formas de hacerlo, date prisa y úsalo.

Siga la cuenta oficial de WeChat "Java Architecture Stack" y responda con la contraseña [Preguntas de la entrevista de Java] para obtener las preguntas de la entrevista de las grandes empresas.

 Antecedentes del problema

Recientemente, muchos amigos le han enviado mensajes privados al hermano Bo en segundo plano, haciéndole esta pregunta: "Hermano Bo, estoy buscando trabajo recientemente y el entrevistador me preguntó cómo eliminar duplicados de la lista. Siento que mi respuesta no". llegar al entrevistador. El resultado esperado, ¿cómo puede el hermano Bo responder esta pregunta para satisfacer al entrevistador?" Para esta pregunta, el hermano Bo sugeriría que utilice secuencias en JDK 8 para la deduplicación. ¿Por qué? Eche un vistazo al análisis que el hermano Bo le dará a continuación.

 Método de deduplicación de listas

Para que todos puedan responder esta pregunta de manera más perfecta, el hermano Bo le mostrará los siguientes métodos clásicos para eliminar duplicados.

2.1 Deduplicación del iterador

En la primera forma, podemos usar un iterador para recorrer cada elemento de datos. Si hay dos o más copias de los datos actualmente repetidos en la colección, el elemento actual se eliminará. Después de este ciclo, podemos obtener una colección sin datos duplicados. Esta es una forma común de eliminar duplicados. El código de implementación es el siguiente:

public class ListTest {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<Integer>() {
   
   {
        add(2); add(5); add(9);
        add(2); add(4); add(9);
        add(3); add(7); add(8);}};
        System.out.println("原list:"+list);
        test(list); 
    }
        
    public static void test(List<Integer> list){
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            Integer integer = iterator.next();
            if(list.indexOf(integer)!=list.lastIndexOf(integer)){
                iterator.remove();} 
                }
        System.out.println("新list:"+list); 
    }
 }

Al ejecutar el código anterior se obtienen los siguientes resultados:

Pero si tiene cuidado, puede ver que cuando se utilizan iteradores para eliminar duplicados, el orden de los resultados de la Lista es confuso y diferente del orden de la colección original. ¿Cómo hacer esto?

2.2 Deduplicación de flujo

En este momento, el hermano Bo presentará un nuevo plan de implementación a sus amigos. Si puede responder a esto, creo que el entrevistador asentirá con satisfacción. Este método de implementación utiliza el flujo Stream que nos ofrece JDK8. El uso de Stream nos permite implementar fácilmente muchas funciones, como el siguiente efecto de deduplicación:

public class ListTest {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<Integer>() {
   
   {
        add(2); add(5); add(9);
        add(2); add(4); add(9);
        add(3); add(7); add(8);}};
        System.out.println("原list:"+list);
        test(list);
    }
    
    public static void test(List<Integer> list){
        list=list.stream().distinct().collect(Collectors.toList());
        System.out.println("新list:"+list); 
    }
}

Ahora puede ver, el código de implementación anterior es más simple que la implementación del iterador. Al ejecutar el código anterior se obtendrán los siguientes resultados:

Además, al utilizar el método stream(), no solo deduplicamos los resultados en ejecución, sino que tampoco cambiamos el orden original de los elementos de la colección, lo que garantiza el orden del contenido de la colección. Esto es más simple y efectivo que el método de deduplicación tradicional. y tiene mejor rendimiento ¡alto!

 resumen

Además de los dos métodos anteriores, tenemos otros métodos que también pueden deduplicar colecciones de listas. En este artículo, el hermano Bo simplemente explica los dos métodos anteriores a todos, considérelo como una introducción. Si conoce otros métodos, puede dar su respuesta en el área de comentarios. ¿Has aprendido el contenido de hoy? ¡Preste atención a la pila de arquitectura Java y obtendrá información útil todos los días!

Supongo que te gusta

Origin blog.csdn.net/weixin_41692221/article/details/131325972
Recomendado
Clasificación