package com.xiaolei.set;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
/**
* set集合底层去重原理
* 1.hashset底层去重,与hashCode、equals方法相关
* 2.是优先对比hashCode值在对比equals值,当hashCode值相同,并且equals返回的值是true,则判定为重复元素
* 2.1 hashCode值不相同,就不会调用equals方法进行比较了
* 2.2 hashCode值相同,就调用equals方法
* @author 肖磊
*
*/
public class Demo2 {
public static void main(String[] args) {
HashSet<Person> set=new HashSet<>();
//增加
//方法一
// set.add(new Person("小王", 10, 100));
// set.add(new Person("小王", 10, 100));
// set.add(new Person("小李", 11, 200));
// set.add(new Person("小黑", 12, 300));
// set.add(new Person("小哈", 13, 400));
// set.add(new Person("老李", 14, 500));
//方法二
Person p1=new Person("小王", 10, 100);
Person p2=new Person("小王", 10, 100);
Person p3=new Person("小李", 11, 200);
Person p4=new Person("小黑", 12, 300);
Person p5=new Person("小哈", 13, 400);
Person p6=new Person("老李", 14, 500);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
set.add(p6);
System.out.println(set.size());
p6.setName("老二");//获取p6里面的name属性把它修改成括号里的内容;只要它调用了这个方法不管它在传给set的前面或后面调用都修改成功
for (Person per : set) {
System.out.println(per);
}
//一下实验调用下面xxx的方法返回的是xxx里的map.put("a", 1);括号里面的返回值
// Map m=new HashMap<>();
// xxx(m);
// System.out.println(m);
}
// public static void xxx(Map map) {
// map.put("a", 1);
// }
}
class Person implements Comparable<Person>{//使用treeset集合进行排序必须实现Comparable接口
private String name;
private int age;
private float salary;
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;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
public Person(String name, int age, float salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
public Person() {
super();
}
@Override
public int hashCode() {
System.out.println("-----------hashCode-------------");
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + Float.floatToIntBits(salary);
return result;//把返回的值改成1和equals返回的值改成true就会输出重复的
}
@Override
public boolean equals(Object obj) {//如果发现重复的就会运行此方法
System.out.println("-----------equals-------------");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (Float.floatToIntBits(salary) != Float.floatToIntBits(other.salary))
return false;
return true;
}
@Override
public int compareTo(Person o) {//通过name的首字母拼音进行排序所有.name和.getname(this.name.compareTo(o.getName())
// TODO Auto-generated method stub
return (int) (this.salary-o.salary);//按照工资进行排序return this.salary-o.salary;
}
}
set集合的基本特点,set集合底层去重原理,集合怎么进行排序
需积分: 43 139 浏览量
2022-07-01
19:34:54
上传
评论
收藏 14KB ZIP 举报
萧磊y
- 粉丝: 12
- 资源: 3
最新资源
- mybatis中的动态sql, 涉及 where trim set if foreach等
- 简单- 快递运输(Java & JS & Python & C).html
- mybatis框架 更改ems系统,使用动态sql等.zip
- 易语言工具条下拉菜单实现
- Mybatis动态SQL高级映射.zip
- 源码esp8266开发板机智云机智云智能灯
- Python实现多图像转换成连贯的PDF文件,支持所有图片格式,可预览、裁剪、自定义PDF布局、设置图像顺序、PDF质量选择等
- H5腾讯地图选择位置组件
- 基于UCC28019+LM5017电源板硬件(原理图+PCB)工程文件.zip
- 源码esp8266开发板机智云机智云空气净化器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0