hashSet
public class SetDemo1 {
public static void main(String[] args) {
Set<String> set=new HashSet<>();
set.add("haha");
set.add("xiangxiang");
set.add("baby");
//1.
Iterator<String> it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
//2.
for(String s:set){
System.out.println(s);
}
//3.
set.forEach( s-> System.out.println(s));
}
}
----------------------------------------------------
alt+insert重写hashCode()和equals()方法
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
public boolean equals(Object o) {
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 HashSetDemo1 {
public static void main(String[] args) {
/*
哈希值:
对象的表现形式
1.如果没有重写hashCode方法,计算的哈希值是不同的(哈希碰撞情况除外)
2.如果重写了hashCode方法,不同对象属性相同,计算的哈希值是相同的
*/
Student s1 = new Student("zhangsan", 18);
Student s2 = new Student("zhangsan", 18);
Student s3 = new Student("lisi", 18);
//1.没有重写
System.out.println(s1.hashCode());//793589513
System.out.println(s2.hashCode());//1313922862
System.out.println(s3.hashCode());//495053715
//2.重写
System.out.println(s1.hashCode());//-1461067297
System.out.println(s2.hashCode());//-1461067297
System.out.println(s3.hashCode());//102983072
}
}
----------------------------------------------
public class HashSetDemo2 {
public static void main(String[] args) {
//Integer String类型的对象都重写了hashCode和equals方法
Student s1 = new Student("zhangsan", 18);
Student s2 = new Student("zhangsan", 18);
Student s3 = new Student("lisi", 18);
HashSet<Student> set = new HashSet<>();
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set);//[Student{name = lisi, age = 18}, Student{name = zhangsan, age = 18}]
//LinkedHashSet 是HashSet的子类,底层是一个双向链表维护元素的顺序,数据是有序的
LinkedHashSet<Student> lhs=new LinkedHashSet<>();
lhs.add(s1);
lhs.add(s2);
lhs.add(s3);
System.out.println(lhs);//[Student{name = zhangsan, age = 18}, Student{name = lisi, age = 18}]
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!