set集合就是无序且不能重复
package com.cn1;
import java.util.HashSet;
public class HashDemo {
public static void main(String[] args) {
HashSet<Student> hash = new HashSet<Student>();
// hash.add("hello");
// hash.add("java");
// hash.add("jjjj");
// Student student1 = new Student();
Student s6 = new Student("tt",12);
Student s7 = new Student("tt2",132);
Student s8 = new Student("tt1",142);
Student s9 = new Student("tt1",142);
hash.add(s6);
hash.add(s7);
hash.add(s8);
hash.add(s9);
for (Student s :hash){
System.out.println(s.getAge()+"---"+s.getName());
}
}
}
如何实现hash的不重复,我们只需要在Student中重写方法就好了,可以直接生成
1、fn+alt+ins
2、
3、
finnish即可
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
这里也同样不包含重复元素的
this就是获取到上一个元素的年龄 年龄比如33 下一个s.age是30 由于s.age-this.age = 30-33=-3
而-3<0 所以30就放在33的后面了
linqingxia进不去了 因为this.age=s.age 所以就不输入
比较器
package com.cn1;
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
//这个在demo类重写方法的方法(比较器) 就可以不需要再Student类去重写一个方法了
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
//在demo类去 重写方法 其实就是在上面TreeSet方法的()中
//写入new Comparator<Student>()
public int compare(Student s1, Student s2) {
//this.age - s.age
//s1 - s2
int num = s1.getAge()-s2.getAge();
int num2=num==0?s1.getName().compareTo(s2.getName()):num;
//首先是因为是private所以需要用get方法去获取年龄
// 如果一致则执行下一个语句
//两个对象通过get方法获取到Name,再通过compareTo()方法进行判断
//如果一致就按照num的方法继续走
return num2;
}
});
Student s1 = new Student("linqingxai",19);
Student s2 = new Student("yangtt",13);
Student s3 = new Student("zhangjie",14);
ts.add(s1);
ts.add(s2);
ts.add(s3);
for (Student s : ts){
System.out.println(s.getAge()+"--"+s.getName());
}
}
}