Set具有无序不可重复的特点
因为与List同为Collection的继承类,都继承了Collection的方法,基本操作与List一样,友友们可以看上一期对List容器基本用法的详解,这里我们讲的主要是Set容器基于equals方法的不可重复条件。
Set不可重复的基础是equals方法可以通过重写equals方法来定义数据相同的条件。
1.建立Emp类,其中重写了equals方法和toString方法
package 集合Set;
import java.util.Objects;
public class Emp {
private int id;
private String ename;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Emp emp = (Emp) o;
return id == emp.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", ename='" + ename + '\'' +
'}';
}
public Emp(int id, String ename) {
this.id = id;
this.ename = ename;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
}
2.按照类中定义的equals方法Set容器会自动去除重复的数据
package 集合Set;
import java.util.HashSet;
import java.util.Set;
/**
* Set和List
* Set中原素没有重复
* 且是无序的
*基本方法和List一致因为Set和List都是Collection的子接口
*hashCode()获得对象的哈希值
* 哈希值,用来计算对象的存储位置;
* 调用hashCode方法获得哈希值
* 通过哈希值得到地址
* 看地址上是否存在元素
* 如果存在调用equals方法
*不存在直接调用add方法
*
*
*
*
* LinkedHashSet 输入和输出的顺序相同
*
*/
public class study_01 {
public static void main(String[] args) {
// test01();
test02();
}
//Set的常用方法还有两个容器之间的操作和List一样
private static void test01(){
//继承至Collection
// 基本方法和List一致因为Set和List都是Collection的子接口
Set s=new HashSet<>();
s.add("hello");
s.add("word");
s.add("hello");//不会重复加入
System.out.println(s);
}
//set中不可重复的核心:equals方法
private static void test02(){
Emp e1=new Emp(1001,"赵宇晖");
Emp e2=new Emp(1002,"赵雪晨");
Emp e3=new Emp(1001,"王豪杰");
Set set =new HashSet<>();
set.add(e1);
set.add(e2);
set.add(e3);
System.out.println(set);
}