未分类
2020-08-24 13:35:17
1822677238@qq.com
手机扫码查看
集合框架之Set集合
Set子接口
特点:无序、无下标,元素不可重复
方法:全部继承自Collection中的方法
Set实现类
HashSet
基于Hashcode实现元素不重复
当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入
import java.util.HashSet;
import java.util.Objects;
public class demos{
public static void main(String[] args) {
Student s1=new Student("tom",22,"男",99D);
Student s2=new Student("jack",23,"女",78.5);
Student s3=new Student("home",44,"男",46.5);
Student s4=new Student("home",44,"男",46.5);
HashSet<Student> set=new HashSet<Student>();
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
for(Student s:set){
System.out.println(s);
}
}
}
class Student{
String name;
Integer age;
String sex;
Double score;
public Student(String name, Integer age, String sex, Double score) {
this.name = name;
this.age = age;
this.sex = sex;
this.score = score;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name) &&
Objects.equals(age, student.age) &&
Objects.equals(sex, student.sex) &&
Objects.equals(score, student.score);
}
@Override
public int hashCode() {
return Objects.hash(name, age, sex, score);
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", score=" + score +
'}';
}
}
LinkedHashSet:
链表实现的HashSet,按照链表进行存储,即可以保留元素的插入顺序
TreeSet:
基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过ComparaTo方法确定是否为重复元素
import java.util.*;
public class demos{
public static void main(String[] args) {
TreeSet<Teacher> list= new TreeSet<Teacher>();
list.add(new Teacher("tom",22,"男",5000D));
list.add(new Teacher("tom2",24,"男",5000D));
list.add(new Teacher("tom3",23,"女",5000D));
list.add(new Teacher("tom",22,"男",5000D));
for(Teacher t:list){
System.out.println(t);
}
}
}
class Teacher implements Comparable<Teacher>{
String name;
Integer age;
String sex;
Double salary;
public Teacher(String name, Integer age, String sex, Double salary) {
this.name = name;
this.age = age;
this.sex = sex;
this.salary = salary;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", salary=" + salary +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Teacher teacher = (Teacher) o;
return Objects.equals(name, teacher.name) &&
Objects.equals(age, teacher.age) &&
Objects.equals(sex, teacher.sex) &&
Objects.equals(salary, teacher.salary);
}
@Override
public int hashCode() {
return Objects.hash(name, age, sex, salary);
}
@Override
public int compareTo(Teacher o) {
if(this.salary>o.salary){
return 1;
}else if(this.salary<o.salary){
return -1;
}else{
if(this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}else{
if(this.name.compareTo(o.name)<0){
return -1;
}else if(this.name.compareTo(o.name)>0){
return 1;
}else{
return this.sex.compareTo(o.sex);
}
}
}
}
}
- 本页地址 https://www.9713job.com/?p=2169
- 上一篇 <<2020java教程:集合框架之List集合
- 下一篇 >>2020java教程:Map体系集合



发表回复