public class 去除重复元素 {
public static void main(String[] args) {
//创建HashSet集合
HashSet<Student> hSet = new HashSet<>();
//添加学生对象,在Student类中已经重写过hashCode方法,不然下面属性值一样的对象则会重复添加
//因为HashSet集合是根据哈希值来确定存入底层数组中的位置,不重写则是计算的地址值。
Student stu1 = new Student("11c",21);
Student stu2 = new Student("hpy",22);
Student stu3 = new Student("hpy",22);
//添加对象
hSet.add(stu1);
hSet.add(stu2);
hSet.add(stu3);//false
//迭代器遍历
Iterator<Student> it = hSet.iterator();
while (it.hasNext()){
Student next = it.next();
System.out.println(next);
}
}
}
JavaBean
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 + "}";
}
}
HashSet是一个无序,不重复,无索引的集合。
在上尼古拉斯阿伟老师的课的时候,他提出了5个问题,我将以我所学一一给出解答。
HashSet集合的底层数据结构是什么样的。
根据哈希值计算放入底层的数组位置,如果有重复位置的元素,比较若相同,丢弃该元素,不同则以链表的形式挂在该位置的元素下面。(java8以后),在底层由数组,链表,红黑树构成。
HashSet集合为何存和取的顺序不一样?
因为不是按顺序存的,而是根据哈希值存入,但是遍历的时候,是按顺序遍历的。
HashSet集合为什么没有索引?
因为索引不好规定,在链表上或者红黑树上,无法确定索引。
HashSet集合是通过什么方式去重的?
根据这两个方法比较,hashCode方法和equals方法,但是如果是自定义对象,必须重写,不然是以地址值相比,不同对象属性值相同也可以存入集合,这样就违背了HashSet集合的本意。
一点小随笔....↓
以前我认为到了某个阶段就会不迷茫了,比如高中的时候上了大学就不会迷茫了,专科的时候以为上了本科就不会迷茫了,其实只有拿到录取通知书的那一刻是不迷茫的,随后就会陷入前路何在的情绪中。现在也是这样,不知道自己毕业后能不能找到好的工作,可以不可以养活自己。我觉得人在哪个阶段都会迷茫,不知道何去何从,只有忙起来的时间才不会去想那些。自己的思维太过发散,我曾经怀疑自己是不是有ADHD,但是我打游戏的时候,或者做自己喜欢的事的时候注意力还是挺集中的,所以仅仅是学习习惯不好吧,maybe。
我容易给自己焦虑,跟自己内耗,说到底还是自己想要的太多,想成为很厉害的人,我的灵魂超脱,我的肉体懒惰。但现在好得多了,学会拒绝那些垃圾情绪,想得多没用,还是得着手做。我的表哥告诉我,不要让学习成为你的负担,而是兴趣驱动你的学习,F,我当然知道,但是怎么做到呢?
算是现阶段自己的想法吧,自己以后回头看的时候,会不会觉得好笑,幼稚,只要着手做就完了呀,笨蛋。
我的灵魂在我的心上撒了一把盐,让我的梦干渴。