Colección JAVA learning-Set, colección HashSet, colección LinkedHashSet, colección TreeSet

Colecciones de Java como Map, Set, List, etc. Todas las colecciones solo pueden almacenar datos de tipo de referencia, son contenedores para almacenar datos de tipo de referencia y no pueden almacenar tipos básicos de datos como int, long, float, double, etc.

Establecer colección

La colección set es una subinterfaz de la colección Collection.Características
:
no contiene elementos repetidos
, no tiene índice, no puede usar el bucle for para recorrer
el método HashSet y no garantiza el orden de iteración de la colección. ;

valor hash

El valor de tipo int calculado por JDK basado en la dirección del objeto o una cadena o un número

Obtenga el valor hash del objeto: object.hashCode()
Características:
el valor hash de múltiples llamadas del mismo objeto es el mismo;
por defecto, el valor hash de diferentes objetos es diferente;
a través de la reescritura del método, se puede realizar El los valores hash de diferentes objetos son los mismos;

Características de la colección HashSet

La estructura de datos subyacente es una tabla hash, que garantiza la unicidad de los elementos establecidos.
No hay garantía para el orden de iteración de los datos.
No hay un método con un índice, y el método ordinario no se puede usar para recorrer
. Dado que es una colección Set, es una colección que no contiene datos repetidos.

Tabla hash de estructura de datos comunes

La tabla hash se implementa con una matriz + lista enlazada, que es una lista enlazada de un elemento;

Use la estructura hash para darse cuenta de la singularidad de la matriz establecida

Debe reescribir los métodos equals y hashcode en la tabla de datos;
puede elegir reescribir directamente en Generar;

Pegue un ejemplo de reescritura:
construyendo un objeto de clase de estudiante:

package hashset;

import java.util.Objects;

public class student {
    
    
    private String name;
    private int age;

    public student() {
    
    
    }

    ;

    public student(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    @Override  //此处重写了equals方法
    public boolean equals(Object o) {
    
    
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        student student = (student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override //此处重写了hashCode方法
    public int hashCode() {
    
    
        return Objects.hash(name, age);
    }
}

Construya una tabla hashset y recorra

package hashset;

import java.util.HashSet;

public class hashsetdemo {
    
    
    public static void main(String[] args) {
    
    
        HashSet<student> ha = new HashSet<student>();
        student s1 = new student("haha",12);
        student s2 = new student("haaa",122);
        student s3 = new student("haaa",122);


        ha.add(s1);
        ha.add(s2);
        ha.add(s3);

        for(student hh:ha) {
    
    
            System.out.println(hh.getName()+" "+hh.getAge());
        }

    }
}

Características de la colección LinkedHashSet

La interfaz Set implementada por tablas hash y listas vinculadas tiene un orden de iteración predecible.
La lista enlazada mantiene el orden de la matriz, y el hashset mantiene la unicidad de la matriz.Esta
implementación es diferente del HashSet en que mantiene todas las entradas de la lista doblemente enlazada.

Conjunto de árboles

Características: los elementos están en orden y el método de clasificación específico depende del método de construcción.Método de construcción
sin argumentos: TreeSet() utiliza la clasificación natural, lo que significa que permite que la clase a la que pertenece implemente el
método de construcción con parámetros: Comparator interfaz, que permite que el método de construcción de la colección reciba la clase de implementación del objeto Comparator, override(Compare(To1,To2) method;

Ejemplo de código, ordenar por edad primero, luego por nombre:

package treeset;

import java.util.Comparator;
import java.util.TreeSet;

public class treeset {
    
    
    public static void main(String[] args) {
    
    
        TreeSet<student> tr = new TreeSet<student>(new Comparator<student>() {
    
    
            @Override
            public int compare(student s1, student s2) {
    
    
                int num = s1.getAge() - s2.getAge();
                int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
                return num2;
            }
        });
        student s1 = new student("zzha",23);
        student s2 = new student("asds",23);

        tr.add(s1);
        tr.add(s2);
        for(student s: tr){
    
    
            System.out.println(s.getName()+" "+s.getAge());

        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_52723971/article/details/110692767
Recomendado
Clasificación