JAVA ------ Conjunto de colección

El conjunto hereda de la colección

Establecer características:

  1. No contiene colección de elementos repetidos
  2. No hay un método con índice, por lo que no puede usar el bucle for ordinario para atravesar
  3. HashSet: No se ofrecen garantías sobre el orden de las iteraciones de la colección.

Ejemplo:

package Set;

import java.util.HashSet;
import java.util.Set;

public class SetDemo01 {
    
    
	public static void main(String[] args) {
    
    
		
		Set<String> set=new HashSet<String>();
		
		set.add("hello");
		set.add("world");
		set.add("java");
		set.add("world");
		
		//增强for遍历
		for(String s:set) {
    
    
			System.out.println(s);
		}	
		System.out.println(set);	
	}
}


Tabla hash :

  • Antes de JDK8, la capa inferior se implementó con una matriz y una lista vinculada
  • Después de JDK8, cuando la longitud es más larga, la capa inferior se optimiza
  • Método de construcción predeterminado de HashSet: cree un nuevo conjunto vacío, la capacidad inicial predeterminada es 16

Al almacenar una tabla hash, primero calcule un valor hash como índice. Para elementos con el mismo índice, primero verifique si el valor hash es el mismo y almacene la diferencia. Si es el mismo, depende de si el contenido del elemento es el mismo. Si el elemento no es el mismo, se almacena. Indica que ya existe y ya no se depositará.

Inserte la descripción de la imagen aquí


Valor hash: el valor de tipo int calculado por el JDK según la dirección o cadena o número del objeto

  • Public int hasCode () en la clase Object: devuelve el valor hash del objeto

Características del valor hash:

  1. El valor hash devuelto al llamar al método hasCode () varias veces para el mismo objeto es el mismo
  2. De forma predeterminada, diferentes objetos tienen diferentes valores hash. Mediante la reescritura de métodos, puede lograr el mismo valor hash de diferentes objetos.
  3. La cadena reescribe el método hashCode

Ejemplo:

Categoría de estudiante:

package Set;

public class student {
    
    
	private String name;
	private int age;
	
	//构造方法
	public student() {
    
    
		System.out.println("无参构造");
	}
	
	public student(String name,int age) {
    
    
		this.name=name;
		this.age=age;
	}
	
	//提供get/set方法
	public void setAge(int age) {
    
    
		if(age<0||age>100)
		{
    
    
			System.out.println("年龄有误");
		}else {
    
    
			this.age=age;
		}
		
	}
	
	public int getAge() {
    
    
		return age;
	}
	
	public void setName(String name) {
    
    
		this.name=name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
	public void show() {
    
    
		System.out.println(name+","+age);
	}

}

principal:

package Set;

import java.util.HashSet;
import java.util.Set;

public class SetDemo02 {
    
    
	public static void main(String[] args) {
    
    
		
		student s1=new student("小李",20);
		student s2=new student("小李",20);
		student s3=new student("小张",40);
		
		//同一个对象多次调用hasCode()方法返回的哈希值相同
		System.out.println(s1.hashCode());
		System.out.println(s1.hashCode());
		//默认情况下,不同对象哈希值不同
		//通过方法重写,可以实现不同对象的哈希值相同
		System.out.println(s2.hashCode());
		System.out.println("-------");
		
		System.out.println("hello".hashCode());
		System.out.println("world".hashCode());
		System.out.println("hello".hashCode());
		System.out.println("-------");
		
		//字符串重写了hashCode方法
		System.out.println("你好".hashCode());
		System.out.println("晚安".hashCode());
		
		
	}
}


Características de HashSet:

  • HashSet implementa la interfaz Set
  • La estructura de datos subyacente es una tabla hash
  • No se garantiza la secuencia de la iteración de la colección, y no se garantiza que el orden de los elementos almacenados y recuperados sea el mismo.
  • No hay un método con índice, por lo que no puede usar el bucle for ordinario para atravesar
  • No contiene elementos repetidos

Ejemplo:

package Set;

import java.util.HashSet;

public class HashSetDemo {
    
    
	public static void main(String[] args) {
    
    
		HashSet<String> hs=new HashSet<>();
		
		hs.add("hello");
		hs.add("world");
		hs.add("java");
		
		for(String s:hs) {
    
    
			System.out.println(s);
		}
	}

}


Características de LinkedHashSet:

  • La interfaz Set implementada por la tabla hash y la lista vinculada tiene un orden de iteración predecible
  • El orden está garantizado por la lista enlazada, y el orden de almacenamiento y recuperación de los elementos es el mismo.
  • La tabla hash garantiza que el elemento es único y no hay elementos duplicados

Supongo que te gusta

Origin blog.csdn.net/weixin_45102820/article/details/113446085
Recomendado
Clasificación