HashSet集合
public class HashSetPractice {
public static void main(String[] args) {
Set<Integer> str1 = new HashSet<>();
str1.add(1);
str1.add(2);
str1.add(3);
str1.add(1); //不允许添加重复元素,添加失败
System.out.println(str1);
//不可以用for循环,但是可以用迭代器和增强for循环遍历
Iterator<Integer> iterator = str1.iterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
System.out.println(next);
}
System.out.println("================");
for (Integer integer : str1) {
System.out.println(integer);
}
}
}
哈希值
public class Person {
@Override
public int hashCode() {
return 2;
}
}
public class HashClass {
public static void main(String[] args) {
Person per = new Person();
int codeNum = per.hashCode();
System.out.println(codeNum);
System.out.println(per);
//该十进制数字与十六进制的地址值相对应
//这时候如果类重写并return具体的数字,那么哈希值将变为相应的数值
String str1 = new String("abc");
int code1 = str1.hashCode();
String str2 = new String("abc");
int code2 = str2.hashCode();
System.out.println(code1);
System.out.println(code2);
boolean isEqual = (str1 == str2); //虽然哈希值相等,但是其变量对应的地址值不等
System.out.println(isEqual);
}
}
HashSet集合存储数据的结构(哈希表)
Set集合存储元素不重复的原理
HashSet存储自定义类型元素
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", 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;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
}
public class NewObj {
public static void main(String[] args) {
HashSet<Person> object1 = new HashSet<>();
Person p1 = new Person("小新",6);
Person p2 = new Person("小新",6);
Person p3 = new Person("妮妮",6);
System.out.println(p1.hashCode());
System.out.println(p1.hashCode());
System.out.println(p1.equals(p2));
object1.add(p1);
object1.add(p2);
object1.add(p3);
System.out.println(object1);
}
}
LinkedList集合
只需要记住特点即可