1.红黑树 知道认识这五条规则和添加节点的规则就ok
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;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
@Override
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
public int hashCode() {
return Objects.hash(name, age);
}
public String toString() {
return "student{name = " + name + ", age = " + age + "}";
}
}
public class demo1 {
public static void main(String[] args) {
//创建学生对象
student stu=new student("ppp",12);
student stu1=new student("ppp",12);
//没有重写hashcode 在Javabean中
System.out.println(stu.hashCode());
System.out.println(stu1.hashCode()); //输出值不一样
//重写hashcode 在Javabean中
System.out.println(stu.hashCode());
System.out.println(stu1.hashCode());//输出值一样
//小部分情况 (哈希碰撞 不一样的输出一样的)
System.out.println("abc".hashCode());
System.out.println("acD".hashCode());//输出值一样
}
}
1.jdk8以前 链表加数组 8以后是数组加链表加红黑树
2.根据元素哈希值与数组长度计算存入位置
3.因为有链表
4.有链表数组红黑树 这三个java不好给索引所有就去除索引
5.hashcode 和 equals
可能不对 酌情瞅瞅
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;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
@Override
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
public int hashCode() {
return Objects.hash(name, age);
}
public String toString() {
return "student{name = " + name + ", age = " + age + "}";
}
}
import java.util.HashSet;
public class demo {
public static void main(String[] args) {
//创建学生对象
student stu=new student("ppp",21);
student stu1=new student("aap",22);
student stu2=new student("xxp",23);
student stu3=new student("ppp",21);
//创建集合 因为要去除重复的(成员变量值) 用hashset 需要重写hashset 和equals
HashSet<student> has=new HashSet<>();
System.out.println(has.add(stu));
System.out.println(has.add(stu1));
System.out.println(has.add(stu2));
System.out.println(has.add(stu3));
}
}